【问题标题】:Animation of dots using view pager使用视图寻呼机的点动画
【发布时间】:2016-05-25 23:32:22
【问题描述】:

我正在处理包含 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();
    }
}

我想实现以下屏幕:

这三个屏幕将在滑动或单击下一步按钮后依次显示。点的橙色告诉我当前正在处理哪个片段。请指导我如何为这些点设置动画?

编辑的代码

我已经使用 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 添加一些样式后,我得到以下信息:

【问题讨论】:

标签: android android-viewpager


【解决方案1】:

您可以使用 Jake Wharton 的 ViewPagerIndicator 为 ViewPager 中的每个选项卡添加标题或简单的圆圈。

Jake Wharton 在GitHub 上提供了一堆示例代码,您也可以参考Jake Wharton 网站上的usage section

【讨论】:

    【解决方案2】:

    我通过使用 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>
    

    【讨论】:

    • 我使用了你的概念,但它不能正常工作,因为我无法为单选按钮设置正确的颜色。请检查我编辑的代码。
    • 将代码也用于单选按钮选择器。现在检查并告诉我您是否能够实现它
    • 我用过这样的 radioBtnOne.setButtonTintList(ColorStateList.valueOf(textColor));它对我有用,但所有单选按钮的边界颜色也是黄色的。
    • 我没用过radioBtnOne.setButtonTintList(ColorStateList.valueOf(textColor));所以我不确定它是否会起作用。但是请检查我更新的代码,它肯定会起作用。我已经在 3 个应用中成功使用了它。
    • 添加样式后,我得到了奇怪的单选按钮颜色。请看截图的编辑代码
    【解决方案3】:

    使用 ViewPagerCircleIndicator 库。 http://viewpagerindicator.com/

    【讨论】:

      【解决方案4】:

      这个库可以帮助你.... https://github.com/PaoloRotolo/AppIntro/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多