私は2つのクラスを作成しました - 1つは拡張さSurfaceView
れ、メソッドを持つクラスでonDraw()
、その中でキャンバスに画像を描画しています:
public class Board extends SurfaceView{
public BitmapFactory myBitmapFactory = new BitmapFactory();
public Bitmap myBitmap = new Bitmap;
public Board(Context context) {
super(context);
setFocusable(true);
}
//here i implement all the abstract classes, which are not important now
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
myBitmap = Bitmap.createScaledBitmap(myBitmapFactory.decodeResource(getResources(), R.drawable.image), 90, 90, false);
Paint paint = new Paint();
canvas.drawBitmap(myBitmap, 20, 20, paint);
}
public void setBitmap(Bitmap b){
this.myBitmap = b;
}
}
また、メソッドを実行するボタンをクリックした後、アクティビティクラスもありますchangeImage
。キャンバスに置いたこの画像を2つ変更したい
public class MyActivity extends Activity {
public Context context = this;
public Board board;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_game);
}
public void changeImage(View view){
Bitmap tmpBitmap = new Bitmap();
BitmapFactory tmpBitmapFactory = new BitmapFactory();
tmpBitmap = Bitmap.createScaledBitmap(tmpBitmapFactory.decodeResource(getResources(), R.drawable.image2), 130, 130, false);
board.setBitmap(tmpBitmap);
board.invalidate();
}
}
しかし、メソッドを呼び出した後、changeImage
何も変更されていません。画像は最初と同じです。invalidate()
内部メソッドも使用しようとしましsetBitmap()
たが、動作しません。これは、呼び出すたびにinvalidate()
新しいビットマップを作成している、または何か間違ったことをしているからですか?
---編集---おおざっぱに、間違っていたのは次のとおりです。
myBitmap = Bitmap.createScaledBitmap(myBitmapFactory.decodeResource(getResources(), R.drawable.image), 90, 90, false);
ずっと同じイメージを設定していました。私はそれを変更しましたが、まだそれらの作業を無効にします。イメージが変わらないというか。他のトピックで結果を探していましたが、解決策が見つかりませんでした。現在、クラスは次のようになっています。
public class Board extends SurfaceView{
public BitmapFactory myBitmapFactory = new BitmapFactory();
public Bitmap myBitmap = Bitmap.createScaledBitmap(myBitmapFactory.decodeResource(getResources(), R.drawable.image), size, size, false);
public int tmp = 0;
public Paint paint = new Paint();
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
canvas.drawBitmap(myBitmap, 50, 50, paint);
}
public void setBitmaps(Bitmap one){
this.paint = new Paint();
this.myBitmap = one;
this.tmp=4;
this.invalidate();
}
そして、私のアクティビティ内のメソッド changeImage() :
public void changeImage(View view){
Bitmap tmpBitmap1 = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.blue), 230, 230, false);
myGameBoard.setBitmaps(tmpBitmap1);
}
使用しようとしました:invalidate()、postInvalidate()、しかし機能せず、何が間違っているのかわかりました