gpt4 book ai didi

java - Android SurfaceView 闪烁

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:49 26 4
gpt4 key购买 nike

我想创建简单的 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;
}

}

}

最佳答案

我建议您不要使用 SurfaceView

根据我的经验,这不是比 View 更好的解决方案。是的,在 View 上扩展的实现类很慢,但是只有当您不知道如何有效地使用 invalidate() 时才会这样做。

我的意思是不要使用 invalidate()(绘制所有 Canvas ),而是使用 invalidate(dirtyRect)(您定义要重绘的矩形,并且 Canvas 的其余部分保持原样)速度非常快。

关于java - Android SurfaceView 闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com