Android实现类型iphone的图片点击效果

        Android点击效果大都使用背景图片的多种状态实现,所以有时候一个ImageView如果比较大的话,而且有点击事件。比如淘宝这样的应用,首页有很多图片的连接,

这样的图片点击一般不太好用背景添加点击效果,如果点到图片直接跳转到下一个页面又会显得很生硬。这时候像iphone那样点击效果覆盖在原始图片上层就会好很多,

思考了一下,只需要重写ImageView,然后重写onDraw方法,在点击的时候添加一层透明的颜色即可。

代码分享给大家:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;

public class CustomizeImageView extends ImageView {

    // 画笔
    private Paint mPaint;
    // 当前矩阵
    private Rect mRect = new Rect();
    
    
    public CustomizeImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // 设置可点击,否则不会响应touch的up事件
        setClickable(true);
        initPaint();
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right,
            int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        // 设置效果矩阵的位置,如果ImageView有padding需要去掉padding
        mRect.set(0 + getPaddingLeft(), 0 + getPaddingTop()
                , right - getPaddingRight(), bottom - getPaddingBottom());
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            // 按下时修改画笔的颜色值,可以自己设置颜色
            // 此处设置点击效果的颜色 0x80表示50%透明,如果不设置透明会遮挡图片
            mPaint.setARGB(0x80, 61, 64, 91);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            // 监听到up事件后需要将画笔颜色值清除
            mPaint.setARGB(0, 0, 0, 0);
            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
        default:
            break;
        }
        return super.onTouchEvent(event);
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 画点击效果
        canvas.drawRect(mRect, mPaint);
    }
    
    private void initPaint(){
        mPaint = new Paint();
        // 初始化画笔,如果不把画笔的alpha值设为0,同样会挡住资源图片
        mPaint.setAlpha(0);
    }
    
}
这样使用就可以与系统的ImageView一样可以在xml中配置。

注意在给ImageView添加src图片的时候,图片最好把透明边框去掉(美工切图的时候就切掉),效果会更好

tips:请使用utf-8编码

未点击效果图:

点击时效果图:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值