在ImageView上绘制矩形

6

我想实现一个裁剪功能,在imageView上放置一个小矩形。矩形应该是静态的,我希望移动图片并在矩形区域内裁剪图像。然后获取矩形中的图像作为裁剪后的图像。我尝试使用Bitmap参数创建画布,但没有成功。我尝试了很多搜索如何做到这一点,但无法在任何地方找到。请帮忙..

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上没有绘制矩形。

你能否发布一下你尝试过的代码?同时,“它不起作用”是什么意思?崩溃了吗?没有显示出来?显示错误了吗?还是其他什么问题? - Amulya Khare
在这里,您可以获取有关此问题的一些提示:http://stackoverflow.com/questions/19263989/optimizing-custom-crop-drawing - Niko
你把上面的代码放在哪里?在哪个方法中?这个方法什么时候被调用?更多的信息会有所帮助。 - Amulya Khare
在OnCreate()中,setContentView后,在包含imageView的布局中。 - Bhavna
1个回答

7
您需要将绘图代码放在视图的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);
    }
}

现在在您的布局中,将当前的 ImageView 替换为 DrawView

更新答案以包括调用 super.onDraw() - Amulya Khare
1
如何为矩形设置动态属性? - Anand Savjani
@AmulyaKhare 如何为矩形框发送动态属性? - Vignes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接