0

デバイスの画面に触れるとボールが出てきてアニメーションするプログラムを作成しようとしています。後でこの 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 クラスには、メインアクティビティからキャンバスをカバーすると思われるキャンバスが既にあるため、私がしたことが正しいかどうかはよくわかりません。誰でもこれを手伝ってもらえますか?

4

1 に答える 1

2

ええ、私はおそらくそのアプローチを変えるでしょう。ボールごとにビューを作成することはあまり意味がありません。カスタム ビューを 1 つ作成します。このビューには、ボールのリストを含めることができます。そのビューのonDraw()メソッドでは、すべてのボールを描画できます。ボールは、最初はデフォルトの半径を持つ単なるオブジェクトPointまたはオブジェクトにすることができます。PointF

の線に沿った何か

private class MyView extends View {
    List<Point> balls;

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        for(Point p : balls){
            canvas.drawCircle(p.x, p.y, 10, myPaint);
        }
    }
}
于 2013-03-28T21:11:37.477 に答える