当前位置: 移动技术网 > 移动技术>移动开发>Android > Android采用双缓冲技术实现画板

Android采用双缓冲技术实现画板

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例为大家分享了android实现画板的具体代码,采用的技术是双缓冲技术,供大家参考,具体内容如下

1.双缓冲技术的概念

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

2.android采用双缓冲实现画板

 实现的思路:

1).定义一个内存中图片,将他作为缓冲区bitmap cachebitmap = null;
2).定义缓冲区cache的canvas对象 canvas cachecanvas = null;
3).设置cachecanvas将会绘制到内存的bitmap上。
cachecanvas.setbitmap(cachebitmap);
4). 将cachebitmap绘制到该view上.
canvas.drawbitmap(cachebitmap,0,0,p);

3.代码实现

package com.lidong.android_ibrary.view;

import android.content.context;
import android.graphics.bitmap;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
import android.graphics.path;
import android.util.attributeset;
import android.view.motionevent;
import android.view.view;

/**
*@类名 : drawview
*@描述 : 使用双缓存技术实现绘制
*@时间 : 2016/4/26 9:18
*@作者: 李东
*@邮箱 : lidong@chni.com.cn
*@company: chni
*/
public class drawview extends view {

 float prex;
 float prey;
 private path path;
 private paint paint = null;
 private int view_width = 800;
 private int view_height = 600;
 //定义一个内存中图片,将他作为缓冲区
 bitmap cachebitmap = null;
 //定义缓冲区cache的canvas对象
 canvas cachecanvas = null;

 public drawview(context context) {
  this(context,null);
 }

 public drawview(context context, attributeset attrs) {
  super(context, attrs);
  //创建一个与该view相同大小的缓冲区
  cachebitmap = bitmap.createbitmap(view_width,view_height,bitmap.config.argb_8888);
  //创建缓冲区cache的canvas对象
  cachecanvas = new canvas();
  path = new path();
  //设置cachecanvas将会绘制到内存的bitmap上
  cachecanvas.setbitmap(cachebitmap);
  paint = new paint();
  paint.setcolor(color.red);
  paint.setflags(paint.dither_flag);
  paint.setstyle(paint.style.stroke);
  paint.setstrokewidth(5);
  paint.setantialias(true);
  paint.setdither(true);
 }

 @override
 protected void ondraw(canvas canvas) {
  paint p = new paint();
  //将cachebitmap绘制到该view
  canvas.drawbitmap(cachebitmap,0,0,p);
  canvas.drawpath(path,paint);
 }


 @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:
    //这是是调用了cachebitmap的canvas在绘制
    cachecanvas.drawpath(path,paint);
    path.reset();
    break;
  }
  invalidate();//在ui线程刷新view
  return true;
 }
}

4.实现的效果

代码下载:android实现画板代码

以上就是本文的全部内容,希望对大家学习android软件编程有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网