自定义控件中的DrawingCache

  • 叙述

    学到东西不偷着藏着,趁今天周五赶紧跟大家分享一下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编辑器,不习惯啊。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水的川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值