前言:
微信作为很火的社交平台广受大众推崇,作为开发者不仅要学会使用软件,更重要的是要琢磨那些吸引人的控件的研发思路。刷了好久的朋友圈,作为一个安卓开发者来说,朋友圈九宫格的图片显示,以及点击图片会有灰色蒙板的效果吸引了我,为了方便大家,也为了给自己温习知识,写下这篇博文。
效果图:
就是这样的效果!
正文:
今天我们就来实现这样的一个效果,在我们动笔写代码之前,我们必须要理清自己的思路,不能一开始就盲目的去写代码,磨刀不误砍柴工。我们唯一能够确定的是,继承自imageview。然后呢?然后重写构造方法,由于用到了点击,所以还要去手动处理一下onTouchEvent方法。看似困难的问题处理起来也会游刃有余了。想法都是对的,其实我们还少分析一个问题,图片会分为本地和远程两种形式,这样的图片如何去加一个灰色的蒙板,远程图片又如何加载呢?带着这些个问题,我们来一一探寻答案。
思考一:继承ImageView
public class GrayScaleImageView extends ImageView
思考二:重写构造方法
public GrayScaleImageView(Context context) {
super(context);
}
public GrayScaleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GrayScaleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
我没有进行一些初始化操作,因为这里还没有什么需要初始化。
思考三:处理onTouchEvent事件
@Override
public boolean onTouchEvent(MotionEvent event) {
Drawable drawable = getDrawable();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (drawable != null) {
// drawable.mutate使得此drawable共享状态,改变时全部改变
drawable.mutate().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
}
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (drawable != null) {
drawable.mutate().clearColorFilter();
}
break;
}
return true;
// return super.onTouchEvent(event);
}