安卓垂直闪烁通常是由于屏幕刷新率与应用程序帧率不同步所致。为了解决这个问题,可以尝试以下几种方法:
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
// 更新UI
mHandler.postDelayed(this, 16); // 设置更新频率为每秒60帧
}
};
@Override
protected void onResume() {
super.onResume();
mHandler.post(mRunnable);
}
@Override
protected void onPause() {
super.onPause();
mHandler.removeCallbacks(mRunnable);
}
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private DrawingThread mThread;
public MySurfaceView(Context context) {
super(context);
init();
}
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mHolder = getHolder();
mHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mThread = new DrawingThread(mHolder);
mThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 留空
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mThread.stopDrawing(); // 停止绘制线程
}
}
class DrawingThread extends Thread {
private SurfaceHolder mHolder;
private boolean mIsDrawing = true;
public DrawingThread(SurfaceHolder holder) {
mHolder = holder;
}
@Override
public void run() {
super.run();
while (mIsDrawing) {
Canvas canvas = mHolder.lockCanvas();
if (canvas != null) {
// 绘制UI
mHolder.unlockCanvasAndPost(canvas);
}
}
}
public void stopDrawing() {
mIsDrawing = false;
}
}
android:hardwareAccelerated="true"
属性,启用硬件加速,可以提高绘制性能。
...
以上是几种可能解决安卓垂直闪烁问题的方法,具体的解决方案可能因应用程序的具体要求而有所不同。
下一篇:安卓处理小数