当前位置: 首页 > news >正文

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);
        }
    }
}复制代码


转载于:https://juejin.im/post/5b7d26cd6fb9a019f709ad65

相关文章:

  • Babel 手记
  • 【Spring学习笔记-MVC-10】Spring MVC之数据校验
  • 为什么使用MAVEN 3.2.1会有版本问题?
  • ng6--错误信息小结(持续更新)
  • org.tinygroup.context2object-参数对象构建
  • 思考 | 云计算 + 区块链 = ?
  • devexpress表格控件gridcontrol设置隔行变色、焦点行颜色、设置(改变)显示值、固定列不移动(附源码)...
  • Day 33 三剑客-awk
  • HDU 4828 (卡特兰数+逆)
  • python学习-文件处理
  • 四、oracle 用户管理二
  • 3.字典常用功能
  • java多线程下载
  • MySQLdb的安装与使用
  • 谋势、聚力、强生态,用友三十而立
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Angular4 模板式表单用法以及验证
  • C++入门教程(10):for 语句
  • create-react-app做的留言板
  • 阿里云Kubernetes容器服务上体验Knative
  • 复习Javascript专题(四):js中的深浅拷贝
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 阿里云ACE认证学习知识点梳理
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (C语言)共用体union的用法举例
  • (LeetCode) T14. Longest Common Prefix
  • (zhuan) 一些RL的文献(及笔记)
  • (六)Hibernate的二级缓存
  • (南京观海微电子)——I3C协议介绍
  • (算法二)滑动窗口
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net 使用ajax控件后如何调用前端脚本
  • .net 提取注释生成API文档 帮助文档
  • .NET6 开发一个检查某些状态持续多长时间的类
  • @Autowired 与@Resource的区别
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @Transactional类内部访问失效原因详解
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [BUUCTF 2018]Online Tool
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [IE9] IE9 beta版下载链接
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [LeetBook]【学习日记】数组内乘积
  • [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列