Android 利用Matrix实现图片随手指平移、旋转、缩放

链接:
Android 利用Matrix实现图片随手指平移、旋转、缩放—旋转
Android 利用Matrix实现图片随手指平移、旋转、缩放—缩放
Android 利用Matrix实现图片随手指平移、旋转、缩放—平移

好久没写博客了(虽然以前也没写多少),本人菜鸟一个,大学刚毕业,现在正在Android的起点爬行,写这篇文章也不是为了教会别人什么东西,主要是为了记录一下自己的学习过程。所有,欢迎大神前排指点,废话不多说,直接上代码吧(里面的注释就够了,就不解释了)
/**
 * 使用矩阵(Matrix)来设置图片的属性
 * 平移、旋转、放大缩小
 * <p>
 * 本类的效果:平移
 * Created by lby on 2017/7/24.
 */

public class CropImageView extends AppCompatImageView {
    private Bitmap mResource; // 图片,可以从外部获取,这里为了方便
    private Matrix matrix = new Matrix(); // 变换矩阵
    private Matrix currentMatrix = new Matrix(); // 临时矩阵
    private float downX; // 手指按下时的 X 坐标
    private float downY; // 手指按下时的 Y 坐标

    public CropImageView(Context context) {
        this(context, null);
    }

    public CropImageView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CropImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        // 获取图片
        mResource = BitmapFactory.decodeResource(getResources(), R.drawable.aaa);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        canvas.save();
        // 通过矩阵来画图片
        canvas.drawBitmap(mResource, matrix, null);
        canvas.restore();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                // 保存手指按下时的位置
                downX = event.getX();
                downY = event.getY();
                // 记录此时矩阵的数据,也就是记录此时图片的属性,比如:位置
                currentMatrix.set(matrix);
                break;
            case MotionEvent.ACTION_MOVE:
                // 把矩阵赋值为手指按下时的位置
                matrix.set(currentMatrix);
                // 计算手指移动时的位置与按下时位置的偏移量,也就是计算图片需要移动的距离
                float x = event.getX() - downX;
                float y = event.getY() - downY;
                // 开始移动
                matrix.postTranslate(x, y);
                // 从新绘制图像
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值