Bagaimana saya bisa mendapatkan gambar ke kanvas untuk menggambar di gambar itu?
Jawaban:
Cara yang baik untuk menggambar Drawable di atas kanvas bukanlah mendekodekannya sendiri, tetapi menyerahkannya kepada sistem untuk melakukannya:
Drawable d = getResources().getDrawable(R.drawable.foobar, null);
d.setBounds(left, top, right, bottom);
d.draw(canvas);
Ini akan bekerja dengan semua jenis drawable, tidak hanya bitmap. Dan itu juga berarti bahwa Anda dapat menggunakan kembali drawable yang sama jika hanya ukurannya yang berubah.
Anda perlu memuat gambar Anda sebagai bitmap:
Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.your_image);
Kemudian buat bitmap bisa berubah dan buat kanvas di atasnya:
Canvas canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true));
Anda kemudian bisa menggambar di atas kanvas.
Anda juga bisa menggunakan cara ini. itu akan mengubah ukuran drawble besar Anda ke kanvas:
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);
coba ini
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);
}
}