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 的对象制作为 Bitmap 以便我可以将其绘制到画布中。而且我也不确定我所做的是否正确,因为在我的 MyImage 类中,我已经有一个画布,我认为它将覆盖主要活动的画布。有人可以帮忙吗?

4

1 回答 1

2

是的,我可能会改变这种方法。为每个球创建一个视图没有多大意义。我会创建一个自定义视图。然后这个视图可以包含一个球列表。在该onDraw()视图的方法中,您可以绘制所有球。球可以是刚开始时具有默认半径的对象PointPointF

类似的东西

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 回答