解决方案 »
- 安卓开发,在我的eclipse中新建了安卓工程但是没有GoogleAPI的MapView这个控件,求助。
- 怎样调用系统自带的那个9宫格解锁程序,或者直接从源码中摘出来
- android 应用程序图标 push
- Android蓝牙通信是怎么获取串口数据?请做过蓝牙通信的高手们帮忙看一下
- android 应用层 如何 发送at命令
- android 3.0之前的版本怎么染多个按钮同时按下
- 三个页面(Activity)之间的切换
- android因为memory low杀掉的activity 会不会再restore出来?
- android 短信读取程序, 为什么string的长度(短信内容)只有一小部分
- 關於使用接口(介面)之疑惑?
- invalidate() 与 OnDraw()
- 请教 __android_log_print,LOG_TAG 问题和原理
http://topic.csdn.net/u/20110718/15/ee90be7b-7be2-424f-a6ac-53225a274abe.html?18577
明白了是什么问题。
怎么解决呢?那个贴上的没看懂。 //加缓冲
private Paint[] paints=new Paint[2];
private Path[] paths=new Path[2];
//这样更新canvas
paints[0]=paints[1];
paints[1]=mPaint;
paths[0]=paths[1];
paths[1]=mPath;
if(paints[0]!=null) //画的时候还有画一次的
canvas.drawPath(paths[0], paints[0]);
canvas.drawPath(mPath, mPaint);
这个是那个例子的解决方法,保证更新一个buffer时另外一个Buffer也要更新。
你这里lockCanvas然后unlockCanvasAndPost相当于两个buffer交替了一次,同时两个buffer的内容不一样就造成闪屏了,既然不用刷屏了怎么不把if提上来,或在条件最后试两个buffer相同。
synchronized (mSurfaceHolder) {
if(xx)
{
mCanvas=mSurfaceHolder.lockCanvas();
drawPend(mCanvas);
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}
}
不用获取buffer的,所以那个帖子 应用里定义了两个记录来描述,SurfaceView的两个buffer的内容,用这两个记录可以还原两个buffer。
//加缓冲
private Paint[] paints=new Paint[2];
private Path[] paths=new Path[2];
//这样更新canvas
paints[0]=paints[1];
paints[1]=mPaint;
paths[0]=paths[1];
paths[1]=mPath;
if(paints[0]!=null) //画的时候还有画一次的
canvas.drawPath(paths[0], paints[0]);
canvas.drawPath(mPath, mPaint); 代码中paint是画笔,path是什么,不知道。看代码,path应该是画条线。path数组中记录原buffer信息吗?我的函数里没有path,用canvas数组来记录信息吗?
引用 7 楼 fontlose 的回复:不用获取buffer的,所以那个帖子 应用里定义了两个记录来描述,SurfaceView的两个buffer的内容,用这两个记录可以还原两个buffer。
我这样写,不对啊! Canvas[] canvas=new Canvas[2];
while(mIsRunning){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (mSurfaceHolder) {
mCanvas=mSurfaceHolder.lockCanvas();
canvas[0]=canvas[1];
canvas[1]=mCanvas;
if(tx<200)
mDraw(mCanvas);
else
mCanvas=canvas[0];
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}
mPaint=new Paint();
mPaint.setColor(Color.WHITE);
canvas.drawRect(0, 0, 480, 320, mPaint);//清屏
Bitmap bm0=Bitmap.createBitmap(logo, 0, 50, 256, 100);
Bitmap bm1=Bitmap.createBitmap(logo, 0, 200, 256, 50);
canvas.drawBitmap(bm0, mainActivity.screenWidth/2-bm0.getWidth()/2, mainActivity.screenHight/2-bm0.getHeight()/2, mPaint);//一张背景图
canvas.drawBitmap(bm1, tx, 135, mPaint);//一张移动图,最后就是这张图片来回的动
}
你这个只要记录tx,其他bm0,bm1,Paint都不变的吧。记录tx就可以还原出一个Buffer了。
明白了,这是记录参数信息,用这个信息来恢复的。但这个是参数少的,如果对象多了,十几个了参数,再这样依靠参数恢复,是不是就很麻烦了。surface,想不到有这样一面。