欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-02 12:43:34
本文实例为大家分享了android实现画板的具体代码,采用的技术是双缓冲技术,供大家参考,具体内容如下 1.双缓冲技术的概念 所谓的双缓冲技术其实很简单,当程序需要在指...

本文实例为大家分享了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实现画板代码

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