无法在 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