drawable.draw
时间: 2024-07-21 21:01:31 浏览: 66
"drawable.draw"通常是指Android中的Drawable对象(图形资源)绘制的过程。Drawable是一个接口,它包含了各种类型的绘图元素,如Bitmap、Shape、NinePatch等。当你需要在一个视图上显示或更新这些图形时,你可以调用Drawable对象的draw()方法。这个方法会将其内容绘制到指定的Canvas对象上,比如在Activity、View或者其他可以接受绘图的地方。
例如,在XML布局文件中定义了一个ImageView并关联了一个Drawable,然后在Java代码中通过ImageView.getDrawable().draw(canvas)的方式将Drawable的内容画出来,实现了界面元素的动态显示。
相关问题
android png图片转为bitmap设置给imageView后,从imageView中作为drawable取出,再调用Drawable.draw(Canvas canvas)将其绘制,透明部分全变成了黑色,如何保留透明度?
在 Android 中,PNG 图片是支持透明度的,因此在将 PNG 图片转为 Bitmap 时,透明部分也应该被正确地保留下来。如果透明部分变成了黑色,可能是由于以下原因导致的:
1. ImageView 的背景色设置为了黑色,导致透明部分变成了黑色。可以尝试将 ImageView 的背景色设置为透明色,即 android:background="@android:color/transparent"。
2. 在将 Bitmap 转为 Drawable 时,使用了错误的方法。正确的方法是使用 BitmapDrawable,而不是使用普通的 Drawable。BitmapDrawable 会正确地处理 Bitmap 中的透明部分。示例代码如下:
```
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
imageView.setImageDrawable(drawable);
```
3. 在调用 Drawable.draw(Canvas) 绘制时,使用了错误的透明度设置。正确的方法是在绘制前调用 Canvas.saveLayerAlpha() 方法保存透明度,绘制完成后再调用 Canvas.restore() 方法恢复透明度。示例代码如下:
```
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
Canvas canvas = new Canvas();
canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), 255, Canvas.ALL_SAVE_FLAG);
drawable.draw(canvas);
canvas.restore();
```
以上是可能导致 PNG 图片透明部分变成黑色的原因和解决方法,可以根据具体情况进行调试和处理。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo); Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(circleBitmap); Paint paint = new Paint(); paint.setAntiAlias(true); canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, Math.min(bitmap.getWidth(), bitmap.getHeight()) / 2, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, 0, 0, paint); canvas.drawBitmap(circleBitmap, 0, 0, null);如何加载这段代码返回的对象
这段代码返回的是一个圆形的Bitmap对象,可以通过以下方法加载这个Bitmap:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(circleBitmap);
Paint paint = new Paint();
paint.setAntiAlias(true);
canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, Math.min(bitmap.getWidth(), bitmap.getHeight()) / 2, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, 0, 0, paint);
canvas.drawBitmap(circleBitmap, 0, 0, null);
将以上代码片段放在Activity或者Fragment的onCreate()方法中即可。需要注意的是,需要将图片资源放在res/drawable文件夹下面。
阅读全文