美文网首页ITBOXUI自定义View系列
一款Android的滚轮控件,从别的项目反编译过来的

一款Android的滚轮控件,从别的项目反编译过来的

作者: 韦东锏 | 来源:发表于2015-09-03 09:50 被阅读13295次

    几个月就有用过一款请吃饭的APP,很喜欢里面设置年龄和身高的滚轮控件,多次试图从网上搜索到这款滚轮控件,可惜都没有找到,于是就狠下心来自己反编译了一下,幸好,皇天不负苦心人,终于成功了,我应该是第一个把这款控件公开出来的人吧,废话少说,先看效果图……

    device-2015-09-03-092014.png insta.gif

    效果是不是很惊艳啊,跟其他的滚轮控件有以下几点我喜欢的

    • 滑动的速率适中,很多滚轮控件,手指稍微一划,数据就跑的很快,跟listview一样,可是滚轮控件一般数据量比较少,而且目的是为了选中需要的选项,这款滚轮控件的滑动速度我很喜欢
    • 全屏的滑动操控:就是当你在滚轮区域按下手指,滑动滚轮控件的时候,当你的手指滑动到滚轮区域外面的地方,也可以控制滚轮的滑动,very good,实现方法是拦截了ACTION_MOVE这个事件,所以整个大屏幕都可以作为滚轮控件的滑动控制
    • 字体的折叠效果,和选中时候的折射效果,这个真的是跟原生的iOS几乎一致的,其他网上说的仿照iOS的滚轮,我觉得都是骗人的

    好了,最后说下这款滚轮控件的用法,整个控件是个LoopView,用法非常简单,查看下面的代码注释:

    LoopView loopView = new LoopView(this);
            ArrayList<String> list = new ArrayList();
            for (int i = 0; i < 15; i++) {
                list.add("item " + i);
            }
            //设置是否循环播放
            loopView.setNotLoop();
            //滚动监听
            loopView.setListener(new LoopListener() {
                @Override
                public void onItemSelect(int item) {
                    Log.d("debug", "Item " + item);
                }
            });
            //设置原始数据
            loopView.setArrayList(list);
            //设置初始位置
            loopView.setPosition(5);
            //设置字体大小
            loopView.setTextSize(30);
            rootview.addView(loopView, layoutParams);
    

    使用方法非常简单的,看代码的注释就可以了,我这里为了演示,估计把自己设置的很大

    这款控件因为是反编译的,所以源码还有很多被混淆的地方,没有编译出原始的意思,但一些关键的字段我是解析出来的,至于具体的使用,我测试了下,是没有问题的。

    源码我放在了Gitbub,欢迎查看

    相关文章

      网友评论

      • 无声的喧闹:感谢分享,很好用
      • ea9159f2d8fe:怎么更改item高度?当字体比较大的时候字体就显示一半了。。
        ea9159f2d8fe:好吧 item高度是取决于整体控件高度的
      • cd4324282549:添加点击事件监听好像不执行啊,要怎么处理
      • 63cc0c792d4f:Error:Error converting bytecode to dex:
        Cause: Dex cannot parse version 52 byte code.
        This is caused by library dependencies that have been compiled using Java 8 or above.
        If you are using the 'java' gradle plugin in a library submodule add
        targetCompatibility = '1.7'
        sourceCompatibility = '1.7'
        to that submodule's build.gradle file.
        在编译时出现这个错误,应该是你的源码的编译版本问题,请问有老版本的wheelview吗
        韦东锏:@Adam0407 由于提交jcenter,使用了java8,没有安装java8会报错,我已经移除了这个限制,重新拉去下代码就可以了
      • Coding丁:有左右两个滚轮,右边数据是要随着左边数据发生变化,右边滚轮滚动一次之后,滚动左边滚轮,此时右边数据需要改变,把右边滚轮的初始位置设置为0;设置setInitPosition(0)不管用,请问该如何解决?
        韦东锏:@丶萌面超人 已解决
        丶萌面超人:同问,解决了吗?
      • MiracleLong:非常感谢,改了下自适应,很好用。
        2d0ac5a90df7:@longdawei1988 请问item高度不随文字改变您会弄吗?
      • 30035123f1bc:如果变成两位就出问题了,比如01,02,...,14这种,会出现个位有部分被遮住了
      • 南朝小木瓜:如果里面是不是文字放图片咋整..修改了下发现不少问题啊 :cold_sweat:
        2d0ac5a90df7:@e8d287b02403 添加图片的问题弄出来了吗?
      • 芝麻呱:在与Scrollview中使用时滑动冲突了 :sob:
        韦东锏:@大力丸 touch事件冲突了,需要专门梳理touch事件的传递
      • 558ef9552d12:你好 麻烦问一下 假如我想滑动到某一项应该怎么做呢
        韦东锏:@spring_wu 目前还没有这块的功能,不过可以考虑增加这个
      • 王元_Trump:非常好 决定以后都用这个了
      • BangAiN:不错 不错
      • 迷惘搬运工:没看懂怎么计算高度的
      • _Cyun:大神,你是用什么软件反编译的啊?
      • 王元_Trump:设置LoopView的宽度无作用啊 我想实现单列数据展示 并且上下两条线为屏幕宽 match_parent或者是具体长度都不行,设置了以后LoopView的宽度还是内容字的宽度
        韦东锏:高度还没有适配,目前的高度是按照文字的高度来决定的
        王元_Trump: @陈茶 没有
        d6577135c69b:@王元_Trump 你好,这个demo中两条线的宽度你解决了吗
      • 9f6d46ac9717:help 这文字长度太长的时候 如何换行。。发现不好改啊
        韦东锏:@染上空丶白 这个库我最近会进行一轮更新,由于是反编译过来的,有部分逻辑会有缺失,而且宽度不能自定义,只能根据文本的大小决定,这些会彻底做个梳理
        项目一直非常紧,抽不开时间,不好意思
        571bace86dd5:@忘不川 亲你解决了吗,或者这个咋解决啊,我也是改了半天发现不好改
      • 顺应自然y:为啥我把15条数据改成3条就数组越界了
      • 叹小号:大神,这么貌似有一个bug,在选中最后一个的时候,滑动会很不流畅,而且选中的item不会改变...期望修改一下!
        韦东锏:@叹号 这款反编译的,还有一些代码没有完全的还原
        叹小号:@b1576431fcf3 我研究一下哈..可是我必须要循环呀
        b1576431fcf3:@叹号 正在研究这个demo,确实滑到最后时,就会固定到最后1个位置。看来不能设置循环..

        还有怎么设置高宽求解。
      • hackest:反编译过爱鲜蜂的,发现他们用的是一个叫pickview的自定义view不过,关键地方还是没看懂
      • android_Joe:大神你就是用一般的反编译编译的吗,有没有特殊的工具,求解,我也反编译过,都没有反编译过来,求解啊 :smile:
        android_Joe:@韦东锏 所噶,收到
        韦东锏:@123yangu 就是普通的反编译,apk混淆的指示方法,逻辑是还在的
      • J1aDong:我当初也是想反编译这个控件的,奈何看不懂就放弃了,想不到也有人想这么干
      • 小鄧子:很棒,👍🏻

      本文标题:一款Android的滚轮控件,从别的项目反编译过来的

      本文链接:https://www.haomeiwen.com/subject/wmulcttx.html