无法在 imageview 上绘制矩形

Posted

技术标签:

【中文标题】无法在 imageview 上绘制矩形【英文标题】:Unable to draw rectangle over imageview 【发布时间】:2012-02-25 11:44:32 【问题描述】:

我在 imageview 上绘制矩形时遇到问题。这是代码的和平。 XML 也在那里。我最关心的是我们是否可以在 imageview 上绘制矩形。??

protected void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.cropimage);
            paint=new Paint();
            bobj = new BaldBooth1();
            bm = BaldBooth1.bMap;
            d = new BitmapDrawable(bm);
            iv = ((ImageView) findViewById(R.id.image));
            iv.setImageDrawable(d);
            createRectInView(iv);

            ((ImageButton) findViewById(R.id.next)).setOnClickListener(this);

        
        public void createRectInView(View v) 
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(3);
            canvas=new Canvas();
            canvas.drawRect(50, 50, 80, 80, paint);
            v.draw(canvas);


        

【问题讨论】:

cropping image using rect的可能重复 所以..??我有什么问题哈..??没有人回答,所以以这种方式发布..F>O 有点容易被冒犯,是吗?是的,停止发送垃圾邮件问题。如果你没有得到任何答案,可能是因为你没有给它足够的时间(1 小时通常不够)或者你的问题缺乏质量 (确实如此,几乎没有解释你到底想做什么做;如果没有人能弄清楚你想要什么,他们就帮不了你). 那个问题有什么问题..去看看..有时我们没有时间..是的,我删除这些问题供您参考..如果您有那么多时间..浪费它关于解决我的问题 我查过了,我告诉你怎么了。而且我不会通过回答您的问题来奖励您的垃圾邮件。而是第一次发布高质量的内容,并在您发布新内容时编辑详细信息。然后我会回答如果我能帮助你。无论如何,该问题都会被推送到首页并进行编辑。 【参考方案1】:

您的方法createRectInView(View v) 不会在 ImageView 上绘制矩形,它只是创建一个画布,在该画布上绘制一个矩形,然后在该画布上绘制 ImageView 的内容,因此它不会按照您的预期进行。

这是一种可能的解决方案:例如,您可以扩展 ImageView 并覆盖其 onDraw() 方法..

public class ExtendedImageView extends ImageView 
    public void onDraw(Canvas canvas) 
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(50, 50, 80, 80, paint);
    

更新:

嗨,阿伦,我只是测试了代码,它运行良好。以下是详细信息:例如,您可以在 com.abc.widget 包中创建 ExtendedImageView,因此在您的cropImage.xml 文件中,将<ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content"> 替换为<com.abc.widget.ExtendedImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content">。如您所见,您只需要更改类名。然后将onCreate()方法改成:

protected void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.cropimage);
            bobj = new BaldBooth1();
            bm = BaldBooth1.bMap;
            d = new BitmapDrawable(bm);
            iv = ((ImageView) findViewById(R.id.image));
            iv.setImageDrawable(d);
            ((ImageButton) findViewById(R.id.next)).setOnClickListener(this);

        

【讨论】:

嗯...是的,您是对的。但是我尝试了您的解决方案,它也不起作用。可能是我做错了,你能详细说明一下吗 02-25 18:42:24.203: E/AndroidRuntime(4013): java.lang.RuntimeException: 无法启动活动 ComponentInfocom.my.baldbooth1/com.my.baldbooth1.CropImage : android.view.InflateException: Binary XML file line #9: Error inflating class com.my.baldbooth1.ExpandableImageView 当我完成更改时会生成此错误。当你尝试时,你可以看到在 imageview 上绘制的矩形......?? 是的,我可以看到矩形,但我直接在代码中而不是在 xml 布局文件中添加 ExtendedImageView。如果你的 xml 布局文件是正确的,也许清理项目可以解决这个膨胀问题。 这是我在 onCreate() 活动方法中所做的:ExtendedImageView imageView = new ExtendedImageView(this); ViewGroup viewGroup = (ViewGroup) findViewById(R.id.relativeLayout1); viewGroup.addView(imageView);位图位图 = BitmapFactory.decodeResource(getResources(), R.drawable.theme); imageView.setImageBitmap(位图);

以上是关于无法在 imageview 上绘制矩形的主要内容,如果未能解决你的问题,请参考以下文章

android imageview id,在ImageView中获取可绘制的ID

iOS 绘制虚线

在位图上绘制文本失败

使用 Core Graphics 在 UIImageView 上绘制一个矩形

imageView添加阴影和边框

UIImageView 在矩形中绘制图像大小而不是图像视图