码迷,mamicode.com
首页 > Windows程序 > 详细

自定义控件中的DrawingCache

时间:2015-07-31 13:14:13      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:drawingcac

  • 叙述

    学到东西不偷着藏着,趁今天周五赶紧跟大家分享一下DrawingCache.

    当我们想对之前已经绘制过的东西进行保存时,需要用到的一个方法。
    下面结合一个简单地例子–画飞机,讲讲这个方法的简单好用之处。。希望对大家有所帮助。
    package com.sc.yanzheng.wight;
    import com.sc.yanzheng.R;
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.view.MotionEvent;
    import android.view.View;

/**
* 类说明
* @author sc
* @date 2015-7-29 上午8:56:08
*
*/
public class PlaneView extends View
{
int i=1;
public float currentX;
public float currentY;
private Bitmap mBgBitmap;

Bitmap plane,enemy;
// 定义、并创建画笔
Paint p = new Paint();
public PlaneView(Context context)
{
super(context);
// 定义飞机图片
plane = BitmapFactory.decodeResource(context.getResources(),
R.drawable.ic_launcher);
enemy = BitmapFactory.decodeResource(context.getResources(),
R.drawable.ic_launcher);
setFocusable(true);
}

@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
if(mBgBitmap!=null){
canvas.drawBitmap(mBgBitmap, 0, 0, p);
}
// 绘制飞机
canvas.drawBitmap(plane, currentX, currentY, p);
canvas.save();
//绘制敌机
canvas.drawBitmap(enemy, 50, 50, p);
canvas.restore();

}
private void getCacheBitmap() {//这次主要讲得就是这个方法,
setDrawingCacheEnabled(true);//开启cache
Bitmap mViewBitmap = getDrawingCache();//会重新调用一遍ondraw方法,将画出来的东西存储为一个bitmap
if (mViewBitmap != null) {
if(mBgBitmap != null && !mBgBitmap.isRecycled()){
mBgBitmap.recycle();//回收之前的bitmap
mBgBitmap = null;
}
mBgBitmap = Bitmap.createBitmap(mViewBitmap);
}
setDrawingCacheEnabled(false);//一定要记得关闭,因为这个很耗内存
postInvalidate();
}
@SuppressLint(“ClickableViewAccessibility”) @Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_UP){
currentX=event.getX();
currentY=event.getY();
getCacheBitmap();
}
return true;
}
}

  • 总结

    但是这方法其实在这里不是很适合,我只是为了讲解下这个方法的简单用法。
    因为这其实很耗内存,如果在这里使用,每点击一次就会开启cache是很耗内存的,这方法一般是用在比如说画一条关于温度的曲线图,每隔15分钟,有一些数据获取到,然后再调用这方法绘制出来,就是有新数据的时候再调用,这样比较适合。
    有任何问题欢迎私信骚扰。。

  • 附:第一次用markdown编辑器,不习惯啊。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

自定义控件中的DrawingCache

标签:drawingcac

原文地址:http://blog.csdn.net/u013377714/article/details/47166417

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!