画布上的可绘制图像

Lan*_*ana 86 android android-canvas android-drawable

如何在画布上获取图像以便在该图像上绘图?

Gáb*_*bor 157

在画布上绘制Drawable的好方法不是自己解码,而是将其留给系统来执行此操作:

Drawable d = getResources().getDrawable(R.drawable.foobar, null);
d.setBounds(left, top, right, bottom);
d.draw(canvas);
Run Code Online (Sandbox Code Playgroud)

这适用于所有类型的drawable,而不仅仅是位图.而且这也意味着如果只改变尺寸,你可以再次使用相同的drawable.

  • 不推荐使用getDrawable(id),你应该使用上面的ContextCompat调用,或者使用getDrawable(id,theme)调用.https://developer.android.com/reference/android/content/res/Resources.html#getDrawable(int) (4认同)

Kon*_*rov 36

您需要将图像加载为位图:

 Resources res = getResources();
 Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.your_image);
Run Code Online (Sandbox Code Playgroud)

然后使位图变为可变并在其上创建一个画布:

Canvas canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true));
Run Code Online (Sandbox Code Playgroud)

然后,您可以在画布上绘图.


Azi*_*mad 13

你也可以用这种方式.它会改变你的画布适合你的画布:

Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, yourDrawable);
yourCanvas.drawBitmap(bitmap, 0, 0, yourPaint);
Run Code Online (Sandbox Code Playgroud)


Roh*_*wal 8

试试这个

Bitmap mBitmap = Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter);

protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFFAAAAAA);
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

        }
Run Code Online (Sandbox Code Playgroud)


34m*_*4m0 8

Drawable d = ContextCompat.getDrawable(context, R.drawable.***)
d.setBounds(left, top, right, bottom);
d.draw(canvas);
Run Code Online (Sandbox Code Playgroud)