博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 开发中不得不知道的 Tips 集合 (第二波)(持续更新 ing)
阅读量:6572 次
发布时间:2019-06-24

本文共 4274 字,大约阅读时间需要 14 分钟。

相关文章

1.你还在写Drawable来实现Imageview的点击效果?

很多时候我们需要给ImageView添加点击效果,例如title上的back按钮。

通常来讲,UI那边会给我们两张图,一张选中效果,一张nomal效果;我们会风骚的撸一个Drawable

复制代码

然后在布局文件中把Imageview的background属性设置成你写的Drawable文件。例如:

复制代码

这样当然没问题,毕竟都是大家熟悉的套路。不料,你突然接到了一个需求,为了支持动态换肤,这个back的图片需要从网络上获取,并且仍然需要支持点击效果。顿时,无数程序猿心中众多那个啥在奔腾。

解决方案: 继承ImageView,监听OnTouchListener的事件,动态设置setColorFilter

public class ClickImageView extends AppCompatImageView {    public ClickImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    public ClickImageView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public ClickImageView(Context context) {        super(context);        init();    }    private void init() {        setOnTouchListener(onTouchListener);    }    private OnTouchListener onTouchListener = new OnTouchListener() {        @Override        public boolean onTouch(View v, MotionEvent event) {            switch (event.getAction()) {                case MotionEvent.ACTION_UP:                    setColorFilter(null);                    break;                case MotionEvent.ACTION_DOWN:                    changeLight();                    break;                case MotionEvent.ACTION_MOVE:                    break;                case MotionEvent.ACTION_CANCEL:                    setColorFilter(null);                    break;                default:                    break;            }            return false;        }    };    private void changeLight() {        int brightness = -80;        ColorMatrix matrix = new ColorMatrix();        matrix.set(new float[]{1, 0, 0, 0, brightness, 0, 1, 0, 0,                brightness, 0, 0, 1, 0, brightness, 0, 0, 0, 1, 0});        setColorFilter(new ColorMatrixColorFilter(matrix));    }}复制代码

布局文件中这么搞妥了

<你的包名.clickimageview android:id="@+id/iv_share" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/act_ic_share" />复制代码

2.WebView加载视频or音频时候的二次元世界

现在APP里面怎么能少的了WebView的舞台呢?不过加载如下网页的时候会有坑

没错,这个网页里面有视频,用户播放视频,然后点击了返回键,此时如果直接finish掉当前的WebActivity时会出现灵异的现象:刚才看的视频仍然在播放,仍然会有声音发出。除非你exit掉咱们的App。

解决方案: 在WebActivity中控制一下WebView,亲测有效

@Override    protected void onResume() {        super.onResume();        wb_content.onResume();    }         @Override    protected void onDestroy() {        super.onDestroy();        wb_content.destroy();  //手动销毁WebView    }        @Override    protected void onPause() {        super.onPause();        wb_content.onPause();    }复制代码

3.是时候从Rxjava1换到Rxjava2啦

还没玩过Rxjava的同学们建议直接从Rxjava2学起,现在还在奋斗在Rxjava1的同学们建议尽快转到Rxjava2的战线。Rxjava1很快就停止更新了。废话不多说,直接祭出官方wiki https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0

4.控制Recyclerview滑动的问题

很多场景下,产品需要我们通过代码控制Recyclerview滑动到第几个position,例如:用户下拉刷新当天节目列表,我们应该计算当前时间播放的是第几个节目,然后滑动到这个position,注:此时这个position应该居于屏幕的中间

解决方案: 这里只说一下LinearLayoutManager下的解决方式

public class CenterLayoutManager extends LinearLayoutManager {    public CenterLayoutManager(Context context) {        super(context);    }    public CenterLayoutManager(Context context, int orientation, boolean reverseLayout) {        super(context, orientation, reverseLayout);    }    public CenterLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);    }    @Override    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {        RecyclerView.SmoothScroller smoothScroller = new CenterSmoothScroller(recyclerView.getContext());        smoothScroller.setTargetPosition(position);        startSmoothScroll(smoothScroller);    }    private static class CenterSmoothScroller extends LinearSmoothScroller {        CenterSmoothScroller(Context context) {            super(context);        }        @Override        public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {            return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);        }    }}复制代码

然后使用Recyclerview的时候,设置LayoutManager为CenterLayoutManager。需要滚动到第几个item直接调用

recyclerview.smoothScrollToPosition(position);复制代码

就妥啦。效果如下。

About Me

contact way value
mail weixinjie1993@gmail.com
wechat W2006292
github https://github.com/weixinjie
blog https://juejin.im/user/57673c83207703006bb92bf6

转载地址:http://geljo.baihongyu.com/

你可能感兴趣的文章
Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)
查看>>
前人栽树,后人擦屁股
查看>>
Connection reset问题,INFO: I/O exception (java.net.SocketException) caught when processing reques
查看>>
Pycharm使用技巧
查看>>
黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换
查看>>
[RK3288][Android6.0] 系统按键驱动流程分析【转】
查看>>
linux 定时器
查看>>
[virtualbox] win10与centos共享目录下,nginx访问问题
查看>>
几个新奇网站
查看>>
2018顺丰视觉岗笔试几个知识点
查看>>
js原生方式实现bind方法
查看>>
静态构造函数!
查看>>
C 小白的 thrift 环境搭建
查看>>
php闭包使用例子
查看>>
虚拟机+centOS挂载ISO步骤
查看>>
java 如何查看jdk版本&位数
查看>>
JAVA中字符串的startWith什么意思
查看>>
Deepin 系统下安装VMware并激活
查看>>
ms12_004漏洞进行渗透
查看>>
spring mvc: xml练习
查看>>