Android:将大位图放在小位图后面,大位图应形成小位图

Posted

技术标签:

【中文标题】Android:将大位图放在小位图后面,大位图应形成小位图【英文标题】:Android: Place Large Bitmap behind Small Bitmap and Large Bitmap should take shape of Smaller Bitmap 【发布时间】:2012-04-18 00:40:19 【问题描述】:

好的,这必须向图形专家寻求帮助。我有一个矩形位图(大)和一个圆形位图(小)。我想将较大的矩形位图放在较小的圆形位图后面,较大的矩形位图呈现较小圆形位图的形状(即矩形位图应该被剪裁或以其他方式)。较小的圆形位图具有一定的透明度,因此裁剪后的矩形位图将在转换后显示出来。我尝试了以下方法:

protected void onDraw(Canvas c) 

int sc = canvas.saveLayer(x, y, x + w, y + h, null,
                              Canvas.MATRIX_SAVE_FLAG |
                              Canvas.CLIP_SAVE_FLAG |
                              Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
                              Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
                              Canvas.CLIP_TO_LAYER_SAVE_FLAG);

canvas.drawBitmap(bmpSmallCircular, 0, 0, backgroundPaint);
backgroundPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
canvas.drawBitmap(bmpLargeRectangular, 0 , 0, backgroundPaint);
backgroundPaint.setXfermode(null);
canvas.restoreToCount(sc);


因此,这提供了部分解决方案,但矩形位图绘制在较小的位图上(尽管它确实采用较小的形状)。我可能遗漏了一些明显的东西,并且会很感激一个观点或朝着正确的方向前进。谢谢!

【问题讨论】:

【参考方案1】:

先画大位图再画小位图你需要交换语句而已

canvas.drawBitmap(bmpLargeRectangular, 0 , 0, backgroundPaint);
canvas.drawBitmap(bmpSmallCircular, 0, 0, backgroundPaint);

【讨论】:

谢谢,已经试过了。由于矩形比圆大,它延伸到圆之外(不是我需要的)。我需要用圆圈覆盖矩形,并且要隐藏圆圈之外的矩形的任何部分。 你能展示一下你真正想要的图像以及你目前得到的图像吗 尝试添加图片,但由于我是新手,看起来这是个问题。但是,我确实将样本上传到了这里:img805.imageshack.us/img805/7628/circleoverlay.png希望能够通过。如果您可以查看图像,则在箭头右侧,矩形的散列区域从视图中隐藏。谢谢。

以上是关于Android:将大位图放在小位图后面,大位图应形成小位图的主要内容,如果未能解决你的问题,请参考以下文章

Android 小部件位图大小

Android显示图像位图错误

Android:临时位图的“尝试使用回收的位图”错误

如何从 Android 中的大位图加载图块?

在 Android 上将大型位图文件调整为缩放的输出文件

将视图转换为位图而不在 Android 中显示?