Làm cách nào tôi có thể đưa một hình ảnh vào canvas để vẽ trên hình ảnh đó?
Câu trả lời:
Cách tốt để vẽ Drawable trên canvas không phải là tự giải mã nó mà là để hệ thống làm như vậy:
Drawable d = getResources().getDrawable(R.drawable.foobar, null);
d.setBounds(left, top, right, bottom);
d.draw(canvas);
Điều này sẽ hoạt động với tất cả các loại có thể vẽ, không chỉ bitmap. Và nó cũng có nghĩa là bạn có thể sử dụng lại chính cái có thể vẽ đó một lần nữa nếu chỉ thay đổi kích thước.
Bạn cần tải hình ảnh của mình dưới dạng bitmap:
Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.your_image);
Sau đó, làm cho bitmap có thể thay đổi và tạo một canvas trên đó:
Canvas canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true));
Sau đó, bạn có thể vẽ trên canvas.
bạn cũng có thể sử dụng cách này. nó sẽ thay đổi sự phù hợp có thể kéo lớn của bạn với canvas của bạn:
Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, yourDrawable);
yourCanvas.drawBitmap(bitmap, 0, 0, yourPaint);
Drawable d = ContextCompat.getDrawable(context, R.drawable.***)
d.setBounds(left, top, right, bottom);
d.draw(canvas);
thử cái này
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);
}
package com.android.jigsawtest;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SurafaceClass extends SurfaceView implements
SurfaceHolder.Callback {
Bitmap mBitmap;
Paint paint =new Paint();
public SurafaceClass(Context context) {
super(context);
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
// TODO Auto-generated constructor stub
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(mBitmap, 0, 0, paint);
}
}