注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

android 的双缓存 =控制闪屏  

2015-04-07 21:44:41|  分类: 疯狂Android 讲义 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
andoird ----》加载在我们的内存中去!
为了有效控制闪屏现象,可以使用双缓冲来加载资源显示。 
/** 
 * 双缓冲技术实例 
 * @author b 
 
 */ 
public class Surfaceview extends View implements Runnable{ 
   
    //要绘制的图片 
    private Bitmap mBitmap; 
    private Paint paint; 
    //内存一块缓冲区 
    private Bitmap sBitmap; 
    private Canvas canvas; 
    public Surfaceview(Context context) { 
        super(context); 
        //加载图片到内存 
        mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.b122)).getBitmap(); 
        //创建指定大小的缓冲区域 
        sBitmap = Bitmap.createBitmap(1000800, Bitmap.Config.ARGB_8888); 
        canvas = new Canvas(); 
        // 
        canvas.setBitmap(sBitmap); 
        paint = new Paint(); 
        //把图片绘制在缓冲区域上 
        canvas.drawBitmap(mBitmap, 00, paint); 
        new Thread(this).start(); 
    
   
    @Override 
    protected void onDraw(Canvas canvas) { 
        super.onDraw(canvas); 
        //将缓冲区域的图片显示出来 
        canvas.drawBitmap(sBitmap, 00, paint); 
    
    @Override 
    public void run() { 
        while(!Thread.currentThread().isInterrupted()){ 
            try
                Thread.sleep(100); 
            catch (Exception e) { 
                Thread.interrupted(); 
            
            postInvalidate(); 
        
    
   
}
这下面的是重写的一个view  也是按照双缓存的思路,解决的问题!

public class MyView extends View {
float preX;
float preY;
public Paint paint;
private Path path;
private int VIEW_WIDTH=320;
private int VIEW_HIGHT=480;
Bitmap cacheBitmap = null;
Canvas cacheCanvas =null;



public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
/*
* 初始化我们的对象
*/
cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HIGHT, Config.ARGB_8888);
cacheCanvas =new Canvas();
path=new Path();
cacheCanvas.setBitmap(cacheBitmap);
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setAntiAlias(true);
paint.setDither(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
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的路径绘图!
path.reset();
break;
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas)
{
// TODO Auto-generated method stub
Paint bmpPaint =new Paint();
// bmpPaint.setColor(Color.BLUE);
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
// canvas.drawPath(path, paint);
}
public MyView(Context context, AttributeSet attrs) {
this(context, attrs,0);
// TODO Auto-generated constructor stub
}

public MyView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}

}


  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017