本篇文章主要介绍了"android 双缓冲分析一些基本的原理",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下:
当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。 双缓冲即在内存中创建一个与屏幕绘图区域一...
当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。
双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。双缓冲实现过程如下:
1、在内存中创建与画布一致的缓冲区
2、在缓冲区画图
3、将缓冲区位图拷贝到当前画布上
4、释放内存缓冲区
下面的例子(一个画图板)将实现双缓冲画图
先自定义一个View(Bitmap将会绘制到这个View上)
这里主要理解:一些基本的原理,详细看代码注释
publicclassDoubleBitmapextendsView {private Bitmap mCachBitMap;//缓冲画布private Canvas mCanvas;//画图private Paint mPaint;//画布private Path mPath;
privateint x,y,dx,dy;
publicDoubleBitmap(Context context) {
this(context, null);
}
publicDoubleBitmap(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint=new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(3);
mPaint.setColor(Color.RED);
mPaint.setAntiAlias(true);
mPath=new Path();
}
@OverrideprotectedvoidonMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);//先测量过后才能获取View的宽和高 mCachBitMap= Bitmap.createBitmap(getMeasuredWidth(),getMeasuredHeight(), Bitmap.Config.ARGB_8888);
mCanvas=new Canvas(mCachBitMap);//把缓冲画布绑定到新创建的canvas对象上面去 }
@OverridepublicbooleanonTouchEvent(MotionEvent event) {
x=(int)event.getX();
y=(int)event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
dx=x;
dy=y;
mPath.moveTo(dx,dy);
break;
case MotionEvent.ACTION_MOVE:
mPath.quadTo(dx,dy,x,y);//绘制二阶贝塞尔曲线 dx=x;
dy=y;
break;
case MotionEvent.ACTION_UP:
mCanvas.drawPath(mPath, mPaint);//用自定义的cavas对象绘制path mPath.reset();//path重置break;
}
invalidate();//时刻准备重绘returntrue;
}
@OverrideprotectedvoidonDraw(Canvas canvas) {
canvas.drawBitmap(mCachBitMap,0,0,mPaint);//把缓存画布上的内容绘制到View默认画布上面去 一次性拷贝过来,避免屏幕闪烁 canvas.drawPath(mPath, mPaint);
super.onDraw(canvas);
}
}
').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('
').text(i));
};
$numbering.fadeIn(1700);
});
});
以上就介绍了android 双缓冲分析一些基本的原理,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_262721.html