Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓&x27;s SurfaceView闪烁_Java_Android_Surfaceview - Fatal编程技术网

Java 安卓&x27;s SurfaceView闪烁

Java 安卓&x27;s SurfaceView闪烁,java,android,surfaceview,Java,Android,Surfaceview,我想创建一个简单的Android应用程序,在触摸屏幕的地方画圆圈。它正在使用View(缓慢),但不使用SurfaceView。结果很奇怪——点击时,整个图像都在移动。我还尝试从另一个线程调用绘图函数,但结果是一样的。还发现了另一个具有这种奇怪行为的示例: 我使用Android 2.3.3,API级别10。任何帮助都将不胜感激 package com.samsung.sketchbook; import android.app.Activity; import android.content.C

我想创建一个简单的Android应用程序,在触摸屏幕的地方画圆圈。它正在使用View(缓慢),但不使用SurfaceView。结果很奇怪——点击时,整个图像都在移动。我还尝试从另一个线程调用绘图函数,但结果是一样的。还发现了另一个具有这种奇怪行为的示例: 我使用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;
        }

    }

}

我建议您不要使用
SurfaceView

根据我的经验,这并不是比
查看
更好的解决方案。是的,在
视图
上扩展的实现类速度很慢,但只有当您不知道如何有效地使用
invalidate()
时才可以


我的意思是不要使用
invalidate()?