【问题标题】:Pinch to zoom inside particular shape in Android捏以放大Android中的特定形状
【发布时间】:2014-06-03 07:06:52
【问题描述】:

我有custom ImageView,我必须在custom shape 内设置图像,如多边形、星形等。我已成功在自定义形状中添加图像。但现在我想在图像上执行pinch to zoom。只有图像应该能够缩放并且形状应该保持原样。我不知道我应该如何进一步进行。

下面是我用来设置图像内部形状的代码:

@Override
    protected void onDraw(Canvas canvas) {

        if (!isInitialized) {
            int w = getWidth();
            int h = getHeight();
            position.set(w / 2, h / 2);
            isInitialized = true;
        }

        transform.reset();
        transform.postTranslate(-width / 2.0f, -height / 2.0f);
        transform.postRotate(getDegreesFromRadians(angle));

        if (scale > 1)
            transform.postScale(scale, scale);

        transform.postTranslate(position.getX(), position.getY());

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

        mCanvas.drawBitmap(src, transform, null);// bg

        mCanvas.drawBitmap(mask, 0, 0, paint);// object
        paint.setXfermode(null);

        canvas.drawBitmap(result, 0, 0, paint);
    }

编辑:
使用上面的代码,有些图像已经能够翻译和缩放。但即将出现的问题是 - 它在画布上显示重复的绘图。不知道为什么会这样。

请为我提供一些帮助/指导,了解如何进一步进行。
任何帮助将不胜感激。
谢谢。

【问题讨论】:

  • 您想在每次执行任何缩放手势时创建一个位图吗?会很慢
  • 我已经在构造函数中编写了这个屏蔽代码。然后在onDraw,我正在绘制位图。我错了吗?
  • 你不需要Bitmap,你可以使用Canvas.saveLayer
  • 但是我应该如何执行捏合以仅缩放内部形状的图像??
  • Canvas.scale 或使用 Matrix 参数绘制你的图像

标签: android bitmap imageview shape


【解决方案1】:
case R.id.zoom:
            Intent zoomIntent = new Intent(con, ImageViewer.class);
            JSONObject jImage;
            try {
                jImage = new JSONObject(jbImage.getString(swiped));
                if(jImage!=null){
                    Log.d("Inventory Cars Details::::::","JImage Lentgh"+jImage.length());
                    String url=jImage.getString("imageURL");
                    if(url!=null){
                        Log.d("Inventory Cars Details::::::","Url Not Null"+jImage.length());
                        if(!url.equalsIgnoreCase("null")){
                            Log.d("Inventory Cars Details::::::","Url string is not Null::"+url);
                            zoomIntent.putExtra("image", jImage.getString("imageURL"));
                        }else{
                            Log.d("Inventory Cars Details::::::","Url string is Null::"+url);
                            zoomIntent.putExtra("image", commonImageURL);
                        }
                    }else{
                        Log.d("Inventory Cars Details::::::","Url is Null::");
                        zoomIntent.putExtra("image", commonImageURL);
                    }
                }else{
                    zoomIntent.putExtra("image", commonImageURL);
                }
                zoomIntent.putExtra("title",
                        jb.getString("year") + " " + jb.getString("c_make")
                        + " " + jb.getString("s_model"));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            startActivityForResult(zoomIntent,DealershipApplication.REQUEST_CODE);
            break;
        }
    }

【讨论】:

  • 使用上面的代码来缩放你的图片。它不会完全适合您,只需为您的应用提供您想要的功能。
  • 请正确参考问题。我认为这与我的问题没有任何关系。
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 2016-11-15
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多