Android view手势拖动和缩放

在实际开发中很多地方都要用自定义的手势缩放和可移动的view,在下在开发不久的时候就遇到啦,当时还不懂手势拖动,经过了各种摸索和查阅终于是自己写出来了,感觉收获颇多,这里我是用的矩阵来对自定义的ImageView进行手势缩放和移动的,感觉matrix真是强大的,稍后我定要详细研究一下Matrix, 之后也会写一片博客大家一起讨论啊,学好数学还真是有用,这里我用的OntouchEvent来做的,下面看代码:

  • 第一点

这里先添加一个view, 我使用的是bitmap来添加的,后面我要使用它的宽度和高度,大家都知道能不用bitmap尽量不用,如果谁有好的方案要给我留言啊,我表示非常感谢,这里我使用一个list来保存所有的可移动的view(下面统称为view), 使用selectImageCount 来确定你选中和要移动的是哪个view, 这里主要的是要记录当前view的坐标,以便后续对它进行缩放和移动

// 添加贴纸图片
    private void addGesturesView(Bitmap b) {
        //将其他贴纸取消选中
        if (b != null) {
            for (int i = (list_V.size() - 1); i >= 0; i--) {
   
                StickersHolder stickersHolder = list_V.get(i);
                if (stickersHolder.getImgV().isSelect()) {
                    stickersHolder.getImgV().setSelect(false);
                    break;
                }
            }

            curruntEditImageView = new MyCustomView(this, b);
            curruntEditImageView.setLayoutParams(new ViewGroup.LayoutParams(MyApplication.getInstance().getScreenWidth(),
                    MyApplication.getInstance().getScreenHeight()));

            curruntEditImageView.setScaleType(ImageView.ScaleType.MATRIX);
            curruntEditImageView.setImageBitmap(b);
            curruntEditImageView.setSelect(true);
            curruntEditImageView.invalidate();
            frame.addView(curruntEditImageView);

            curruntTiezhiBitmap = b;

            int bW = b.getWidth();
            int bH = b.getHeight();

            Matrix imageMatrix = new Matrix(curruntEditImageView.getImageMatrix());

            //设置图片的宽度 为了适应屏幕
            int newW = MyApplication.getInstance().getScreenWidth() / 3;
            //等比例缩放
            int newH = (int) (((float) newW / (float) bW) * (float) bH);
            float scale = ((float) newW) / bW;
            imageMatrix.postScale(scale, scale, 0, 0);// 缩放图片大小

            int x1 = MyApplication.getInstance().getScreenWidth() / 3;
            int y1 = MyApplication.getInstance().getScreenHeight() / 3;
            // 原图左上角
            curruntEditImageView.leftTop.set(x1, y1);
            // 原图右上角
            curruntEditImageView.rightTop.set(x1 + newW, y1);
            // 原图左下角
            curruntEditImageView.leftBottom.set(x1, y1 + newH);
            // 原图右下角
            curruntEditImageView.rightBottom.set(x1 + newW, y1 + newH);

            imageMatrix
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值