我是靠谱客的博主 炙热画笔,最近开发中收集的这篇文章主要介绍android 双缓冲地图,双缓冲实现涂鸦view,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

所谓的双缓冲技术其实很简单,当程序需要在指定的view上进行绘制是,程序并不直接绘制到View组件上,而是先绘制到一个内存中的Bitmap中(这就是缓冲),等到Bitmap绘制好了,再一次性将Bitmap绘制到这个View组件上。

下面,定义了

cacheBitmap:该图片将作为缓冲区

cacheCanvas: 定义cacheBitmap上的Canvas对象

通过cacheCanvas = new Canvas(cacheBitmap)将两者练习到一起。

代码很简单,如下,不解释了

public class DrawView extends View

{

float preX;

float preY;

private Path path;

public Paint paint = null;

// 定义一个内存中的图片,该图片将作为缓冲区

Bitmap cacheBitmap = null;

// 定义cacheBitmap上的Canvas对象

Canvas cacheCanvas = null;

public DrawView(Context context, AttributeSet set)

{

super(context, set);

/**

* 获取屏幕的宽高

*/

WindowManager wm = (WindowManager) context

.getSystemService(Context.WINDOW_SERVICE);

DisplayMetrics outMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(outMetrics);

int screenWidth = outMetrics.widthPixels;

int screenHeight = outMetrics.heightPixels;

// 创建一个与该View相同大小的缓存区

cacheBitmap = Bitmap.createBitmap(screenWidth, screenHeight,

Config.ARGB_8888);

// 设置cacheCanvas将会绘制到内存中的cacheBitmap上

cacheCanvas = new Canvas(cacheBitmap);

path = new Path();

// 设置画笔的颜色

paint = new Paint(Paint.DITHER_FLAG);

paint.setColor(Color.RED);

// 设置画笔风格

paint.setStyle(Paint.Style.STROKE);

paint.setStrokeWidth(1);

// 反锯齿

paint.setAntiAlias(true);

paint.setDither(true);

}

@Override

public boolean onTouchEvent(MotionEvent event)

{

// 获取拖动事件的发生位置

float x = event.getX();

float y = event.getY();

switch (event.getAction())

{

case MotionEvent.ACTION_DOWN:

path.moveTo(x, y);

preX = x;

preY = y;

break;

case MotionEvent.ACTION_MOVE:

path.quadTo(preX, preY, x, y);

preX = x;

preY = y;

break;

case MotionEvent.ACTION_UP:

cacheCanvas.drawPath(path, paint); // ①

path.reset();

break;

}

/**

* 通知view重绘可调用invalidate() UI线程中

* 或者postInvalidate  非UI线程中

*/

invalidate();

// 返回true表明处理方法已经处理该事件

return true;

}

@Override

public void onDraw(Canvas canvas)

{

Paint bmpPaint = new Paint();

// 将cacheBitmap绘制到该View组件上

canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint); // ②

// 沿着path绘制

canvas.drawPath(path, paint);

}

}

参考:疯狂android讲义 p355

例子:HandDraw

最后

以上就是炙热画笔为你收集整理的android 双缓冲地图,双缓冲实现涂鸦view的全部内容,希望文章能够帮你解决android 双缓冲地图,双缓冲实现涂鸦view所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部