我想创建一个简单的Android应用程序,它将在我触摸屏幕的位置绘制圆圈。它正在使用View(缓慢),但没有使用SurfaceView。结果很奇怪 - 点击时,整个图像都在移动。我也尝试从另一个线程调用绘图函数,但结果是一样的。还发现了另一个有这种奇怪行为的例子: http://android-er.blogspot.com/2010/05/android-surfaceview.html 我使用Android 2.3.3,API级别10.任何帮助将不胜感激。
package com.samsung.sketchbook;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SketchBook extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BookView bookView = new BookView(this);
setContentView(bookView);
}
class BookView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
private Paint paint = new Paint();
private float x, y;
public BookView(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
paint.setColor(Color.WHITE);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceCreated(SurfaceHolder holder) {
Log.d("BookView", "surfaceCreated!");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
x = motionEvent.getX();
y = motionEvent.getY();
Canvas canvas = holder.lockCanvas(null);
canvas.drawCircle(x, y, 3, paint);
holder.unlockCanvasAndPost(canvas);
return true;
}
}
}
答案 0 :(得分:-1)
我建议您不要使用SurfaceView
。
我的经验表明,这不是一个比View
更好的解决方案。是的,只有在您不知道如何有效使用View
时,invalidate()
上的实现类才会慢慢地但。
我的意思是不要使用invalidate()
(绘制所有画布),但invalidate(dirtyRect)
(你定义要重绘的矩形,其余的画布就像以前一样)它是很快。