デバイスの画面に触れるとボールが出てきてアニメーションするプログラムを作成しようとしています。後でこの MyImage クラスの複数のインスタンスが必要になるため、画像を別のクラスに入れます。そのため、画面に触れるたびに別のボールが出てきます。
画像を含む MyImage クラスがあります。このクラスは View クラスに拡張されます。オーバーライド メソッド onDraw は、画像がアニメーション化される場所です (画面上で跳ね返ります)。
public class MyImage extends View {
Bitmap g;
float posY = 0;
float posX = 0;
boolean ud = true, lr = true;
public MyImage(Context context) {
super(context);
g = BitmapFactory.decodeResource(getResources(), R.drawable.ba);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(g, posX, posY, null);
...... //code for animating
invalidate();
}
}
このクラスのオブジェクトを作成して、これがクラス MainActivity から他のキャンバスにアニメーション化されるようにしたいと考えています。
public class MainActivity extends Activity implements OnTouchListener{
..... //declarations
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mySurfaceView = new MySurfaceView(this);
mySurfaceView.setOnTouchListener(this);
setContentView(mySurfaceView);
}
@Override
protected void onPause() {
....
}
@Override
protected void onResume() {
....
}
Thread myThread;
Canvas canvas;
public class MySurfaceView extends SurfaceView implements Runnable{
SurfaceHolder myHolder;
boolean isRunnable = false;
public MySurfaceView(Context context) {
super(context);
myHolder = getHolder();
}
public void pause(){
....
}
public void resume(){
isRunnable = true;
myThread = new Thread(this);
myThread.start();
}
@Override
public void run() {
while(isRunnable){
if(!myHolder.getSurface().isValid()){
continue;
}
canvas = myHolder.lockCanvas();
canvas.drawRGB(100, 0, 0);
myHolder.unlockCanvasAndPost(canvas);
}
}
}
@Override
public boolean onTouch(View v, MotionEvent me) {
.....
switch(me.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
mi = new MyImage(this);
canvas.drawBitmap(..) ;//Is it possible to convert object to Bitmap?
break;
}
return true;
}
}
問題は、キャンバスに描画できるように MyImage のオブジェクトをビットマップにする方法がわからないことです。また、私の MyImage クラスには、メインアクティビティからキャンバスをカバーすると思われるキャンバスが既にあるため、私がしたことが正しいかどうかはよくわかりません。誰でもこれを手伝ってもらえますか?