我正在开发一个包含ViewPager的FragmentActivity。 ViewPager使用FragmentPagerAdapter提供三个片段。所以我能够使用viewpager实现滑动屏幕。我可以刷页面,点击下一个按钮,我也可以移动到下一页/片段。以下代码对我有用:< / p>
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();
}
}
我想实现以下屏幕:
这三个屏幕将在刷卡或点击下一个按钮后一个接一个地显示。点的橙色告诉我我正在处理哪个片段。请指导我如何给这些点动画?< / p>
已编辑的代码
我使用了RadioGroup来实现这个概念。考虑以下代码:
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) {
}
});
它在某种程度上起作用,但我没有得到设计中提到的确切颜色。请检查以下屏幕截图:
在Ankit Aggrawal建议的无线电biutton中添加一些样式后,我得到以下内容:
答案 0 :(得分:8)
我通过使用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, float positionOffset, 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>
答案 1 :(得分:1)
这个图书馆可以帮助你...... https://github.com/PaoloRotolo/AppIntro/
答案 2 :(得分:0)
您可以使用Jake Wharton的ViewPagerIndicator为ViewPager中的每个标签添加标题或简单的圆圈。
Jake Wharton在GitHub上提供了大量示例代码,您也可以参考Jake Wharton网站上的usage section。
答案 3 :(得分:0)
使用ViewPagerCircleIndicator库。 http://viewpagerindicator.com/