我正在开发一个包含ViewPager的FragmentActivity. ViewPager使用FragmentPagerAdapter提供了三个片段.所以我能够使用viewpager实现滑动屏幕.我可以刷页面,点击下一个按钮,我也可以移动到下一页/片段.以下代码对我有用:
1.WelcomeFragmentActivity.java
public class WelcomeFragmentActivity extends FragmentActivity { private List<Fragment> listFragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_activity_welcome); //FindViewByID final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); Button btnNext = (Button) findViewById(R.id.btnNext); //Initializing the List listFragments = new ArrayList<Fragment>(); //initializing the fragments WelcomeOneFragment welcomeOneFragment = new WelcomeOneFragment(); WelcomeTwoFragment welcomeTwoFragment = new WelcomeTwoFragment(); WelcomeThreeFragment welcomeThreeFragment = new WelcomeThreeFragment(); //Adding Fragments to List listFragments.add(welcomeOneFragment); listFragments.add(welcomeTwoFragment); listFragments.add(welcomeThreeFragment); //initializing PagerAdapterWelcome PagerAdapterWelcome pagerAdapterWelcome = new PagerAdapterWelcome(getSupportFragmentManager(),listFragments); viewPager.setAdapter(pagerAdapterWelcome); //On clicking next button move to next fragment btnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e("Current position",String.valueOf(viewPager.getCurrentItem())); viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); // If view pager is displaying the 3rd fragment,move to WelcomeActivity if (viewPager.getCurrentItem() == 2) { Log.e("Curent position",String.valueOf(viewPager.getCurrentItem())); startActivity(new Intent(WelcomeFragmentActivity.this,WelcomeActivity.class)); } } }); } }
2.PagerAdapterWelcome.java
public class PagerAdapterWelcome extends FragmentPagerAdapter { private List<Fragment> listFragments; public PagerAdapterWelcome(FragmentManager fm,List<Fragment> listFragments) { super(fm); this.listFragments = listFragments; } @Override public Fragment getItem(int i) { return listFragments.get(i); } @Override public int getCount() { return listFragments.size(); } }
我想实现以下屏幕:
在刷卡或点击下一个按钮后,这三个屏幕将一个接一个地显示.点的橙色告诉我我正在处理哪个片段.请指导我如何给这些点动画?
编辑代码
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) { } @Override public void onPageSelected(int position) { position = viewPager.getCurrentItem(); Log.e("Position",String.valueOf(position)); if (position == 0) radioGroup.check(R.id.radioBtnOne); else if (position == 1) { radioGroup.check(R.id.radioBtnTwo); } else radioGroup.check(R.id.radioBtnThree); } @Override public void onPageScrollStateChanged(int state) { } });
它在某种程度上工作,但我没有得到设计中提到的确切颜色.请检查以下屏幕截图:
解决方法
我通过使用radiogroup实现了这一点.使用相对布局将该无线电组放置在viewpager上方.创建一个具有所需点数的单选按钮作为单选按钮.不要给单选按钮提供任何文本.
编辑:下面是完整的代码.
像这样创建你的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:orientation="horizontal" android:id="@+id/radioGroup"> <RadioButton android:id="@+id/radioBtnOne" android:layout_width="15dp" android:layout_height="15dp" android:background="@drawable/button_selector" android:button="@null"/> <RadioButton android:id="@+id/radioBtnTwo" android:layout_width="15dp" android:layout_height="15dp" android:background="@drawable/button_selector" android:button="@null"/> <RadioButton android:id="@+id/radioBtnThree" android:layout_width="15dp" android:layout_height="15dp" android:background="@drawable/button_selector" android:button="@null"/> </RadioGroup> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
现在在viewpager中,放一个onPageChangeListener
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position,int positionOffsetPixels) { } @Override public void onPageSelected(int position) { radioGroup.check(radioGroup.getChildAt(position).getId()); } @Override public void onPageScrollStateChanged(int state) { } });
以下是单选按钮button_selector.xml的选择器
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="true" android:state_pressed="false" android:drawable="@drawable/toggle_button_selected"/> <item android:state_checked="false" android:state_pressed="false" android:drawable="@drawable/toggle_button_unselected"/> <item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/toggle_button_selected"/> <item android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/toggle_button_unselected"/> </selector>
现在,对于选定按钮,创建此toggle_button_selected_drawable.xml
<?xml version="1.0" encoding="utf-8" ?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="10dp" /> <solid android:color="@color/your_selection_color" /> </shape>
类似地,对于未选择的按钮,创建此toggle_button_unselected_drawable.xml
<?xml version="1.0" encoding="utf-8" ?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="10dp" /> <solid android:color="@color/grey" /> </shape>