ViewPager+seekBar的联动效果

这里写图片描述
主要实现的效果是,拖动seekbar的时候,viewpager跟随滑动。

拖动Viewpager的时候,seekbar进度条跟随滑动。

直接上代码

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    >
</android.support.v4.view.ViewPager>

<SeekBar
    android:layout_marginTop="20dp"
    android:id="@+id/progress"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:max="100"
    />

主要是两个监听

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int i, float v, int i1) {
        seekBar.setProgress((int)((i+1+v)*a));
    }

    @Override
    public void onPageSelected(int i) {
        seekBar.setProgress((int)((i+1)*a));

    }

    @Override
    public void onPageScrollStateChanged(int i) {

    }
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        if (viewPager.isFakeDragging()){
            int offset = (int)((maxOffset/100.0)*i);
            int dragby = offset - currentOffset;
            viewPager.fakeDragBy(dragby);

            currentOffset = offset;
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        maxOffset = viewPager.getWidth();
        viewPager.beginFakeDrag();
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        viewPager.endFakeDrag();

    }
});

完整代码

public class MainActivity extends AppCompatActivity{
    private SeekBar seekBar;
    private ViewPager viewPager;
    int maxOffset;
    int currentOffset;
    private int[] imageRIds = {
            R.drawable.a,
            R.drawable.b,
            R.drawable.c,
            R.drawable.d,
            R.drawable.e,
    };
    float a;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        a = (float)100/imageRIds.length;
        viewPager = findViewById(R.id.viewpager);
        seekBar = findViewById(R.id.progress);

        viewPager.setAdapter(new BannerAdapter(imageRIds));
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {
                seekBar.setProgress((int)((i+1+v)*a));
            }

            @Override
            public void onPageSelected(int i) {
                seekBar.setProgress((int)((i+1)*a));

            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                if (viewPager.isFakeDragging()){
                    int offset = (int)((maxOffset/100.0)*i);
                    int dragby = offset - currentOffset;
                    viewPager.fakeDragBy(dragby);

                    currentOffset = offset;
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                maxOffset = viewPager.getWidth();
                viewPager.beginFakeDrag();
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                viewPager.endFakeDrag();

            }
        });


    }

    public class BannerAdapter extends PagerAdapter{
        private int[] imageReaIds;

        public BannerAdapter(int[] imageReaIds){
            this.imageReaIds = imageReaIds;
        }

        @Override
        public int getCount() {
            return imageReaIds.length;
        }

        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
            return view == o;
        }

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            ImageView imageView = new ImageView(container.getContext());
            imageView.setBackgroundResource(imageReaIds[position]);
            container.addView(imageView);
            return imageView;
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

            container.removeView((View)object);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值