ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> Android开发 >> android 双缓冲分析一些基本的原理

android 双缓冲分析一些基本的原理

来源:网络整理     时间:2015-12-27     关键词:

本篇文章主要介绍了"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

    相关图片

    相关文章