主要实现的效果是,拖动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);
}
}
}复制代码