ImageView 实现点击放大局部图片问题

    image1.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                BitmapDrawable bd  = (BitmapDrawable) image1.getDrawable();
                Bitmap bitmap = bd.getBitmap();//获取图片的位图
                //初始化bitmap的原图宽高
                int intrinsicHeight = bitmap.getHeight();
                int intrinsicWidth = bitmap.getWidth();

                //获得imageview变换矩阵
                Matrix matrix = image1.getImageMatrix();
                float value[] = new float[10];
                matrix.getValues(value);

                float widthRatio = value[0];//x轴缩放系数
                float heightRatio = value[4];//y轴缩放系数

                //获取图像的边界值,根据自己的imageview 在屏幕中的位置做适当调整。
                int scaledImageOffsetX = (int) (event.getX() - (image1.getWidth() - intrinsicWidth*widthRatio)/2);
                int scaledImageOffsetY = (int) (event.getY() - (image1.getHeight() - intrinsicHeight*heightRatio)/2);

                //获取点击位置,在真实图片中的像素位置
                int x = (int) (scaledImageOffsetX/widthRatio);
                int y = (int) (scaledImageOffsetY/heightRatio);
                if (x <0) {
                    x=0;
                }
                if (y< 0) {
                    y= 0;
                }
                if (x + 120 > bitmap.getWidth()) {
                    x = bitmap.getWidth() - 120;
                }
                if (y + 120 > bitmap.getHeight()) {
                    y = bitmap.getHeight() - 120;
                }
                image2.setImageBitmap(Bitmap.createBitmap(bitmap, x, y, 120, 120));
                image2.setAlpha(alpha);
                return false;
            }
        });
    注意:1、x|y 轴的缩放系数 = x|y在屏幕中的像素大小/x|y的真实像素大小!
        2、获取imageview局部图的位图的方法为:Bitmap.createBitmap(bitmap, x, y, 120, 120);本例为120*120像素大小的矩形图。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值