主要实现的效果是,拖动seekbar的时候,viewpager跟随滑动。
拖动Viewpager的时候,seekbar进度条跟随滑动。
直接上代码
复制代码
主要是两个监听
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); } }}复制代码