我正在尝试创建一个程序,其中当我触摸设备的屏幕时,一个球会出来并动画。我将图像放在一个单独的类中,因为稍后我将需要这个 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 类中,我已经有一个画布,我认为它将覆盖主要活动的画布。有人可以帮忙吗?