Android贴纸效果思路

本文介绍了一种在Android自定义View中实现贴纸功能的方法,包括如何利用Canvas和Matrix进行贴纸的移动、缩放及旋转操作。

Android 贴纸

概述
了解过自定义View的童鞋 对Canvas.drawBitmap(Bitmap, Matrix, Paint)这个函数应该不会陌生,Bitmap的位置、大小、旋转角度、扭曲程度等都由Matrix来管理,而实现贴纸效果的就需要借助这个神奇的函数。我们可以通过很多种方法获取到贴纸的Bitmap,也可以很容易的定义绘制Bitmap所使用的Paint,那么剩下我们只需要关心怎样可以借助Matrix来让贴纸随着我们的指尖翩翩起舞。

device-2016-04-07-204711~1.gif

为了更好的管理每个贴纸的Bitmap和Matrix信息,我简单的将二者进行了封装,大家不要在意名字,知道这个类是干嘛的就好了,毕竟如何起一个优雅准确的名字是一个世界性的难题。

public static class ImageGroup {
public Bitmap bitmap;
public Matrix matrix = new Matrix();

//删除贴纸时释放资源时使用
public void release() {
    if (bitmap != null) {
        bitmap.recycle();
        bitmap = null;
    }

    if (matrix != null) {
        matrix.reset();
        matrix = null;
    }
}

}
说到随着指尖,我们就会想到Android丰富的手势操作,因为是自定义View,所有对Bitmap的操作都需要用到手势触点坐标,因此我使用了View的onTouchEvent(MotionEvent event)方法直接对手势触点就行操作,onTouchEvent也是整个贴纸模块的核心。

public boolean onTouchEvent(MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
anchorX = event.getX();
anchorY = event.getY();
moveTag = decalCheck(anchorX, anchorY);
deleteTag = deleteCheck(anchorX, anchorY);
if (moveTag != -1 && deleteTag == -1) {
downMatrix.set(mDecalImageGroupList.get(moveTag).matrix);
mode = DRAG;
}
break;

    case MotionEvent.ACTION_POINTER_DOWN:
        moveTag = decalCheck(event.getX(0), event.getY(0));
        transformTag = decalCheck(event.getX(1), event.getY(1));
        if (moveTag != -1 && transformTag == moveTag && deleteTag == -1) {
            downMatrix.set(mDecalImageGroupList.get(moveTag).matrix);
            mode = ZOOM;
        }
        oldDistance = getDistance(ev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值