2013-10-28 278 views
1

我想要实现一个裁剪功能,我希望在imageView上有一个小矩形。该矩形应该是静态的,我想要移动图像并使图像在矩形区域内被裁剪。然后将矩形内的图像作为裁剪后的图像。 我曾尝试创建一个使用位图作为参数的画布,但它不起作用。我已经尝试了很多来搜索如何做到这一点。但无法在任何地方找到它。请帮助..在ImageVIew上绘制矩形

Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.indoor); 

    Bitmap mutBitmap = Bitmap.createBitmap(200, 400,bitmap.getConfig()); 

    Canvas canvas = new Canvas(mutBitmap); 

      Paint paint = new Paint(); 
      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.FILL_AND_STROKE); 
      paint.setStrokeWidth(10); 
      float leftx = 20; 
      float topy = 20; 
      float rightx = 50; 
      float bottomy = 100; 
      canvas.drawRect(leftx, topy, rightx, bottomy, paint); 

我使用上面的代码,但没有绘制矩形上的ImageView ..

+0

您可以发布您的代码,你有试过..你是什么意思_“它不工作”_ ..崩溃?,不显示?..显示错误?或者是什么? –

+0

在这里你可以得到一些关于这个问题的提示http://stackoverflow.com/questions/19263989/optimizing-custom-crop-drawing – Niko

+0

@AmulyaKhare请参阅编辑.. – Bhavna

回答

4

你需要把绘图代码在它的视图的onDraw()方法被显示。你应该创建一个从ImageView的继承的自定义类,然后重写onDraw()方法如下:

class DrawView extends ImageView { 

    public DrawView(Context context) { 
     super(context); 
    } 

    DrawView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    DrawView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setStrokeWidth(10); 
     float leftx = 20; 
     float topy = 20; 
     float rightx = 50; 
     float bottomy = 100; 
     canvas.drawRect(leftx, topy, rightx, bottomy, paint); 
    } 
} 
在布局

现在,包括DrawView而非目前ImageView

+0

包含调用'super.onDraw()'的更新答案' –

+0

如何设置动态属性rect? –