第七章 实现炫酷效果—图像和动画(4)

来源:互联网 发布:mac版pdf虚拟打印机 编辑:程序博客网 时间:2024/05/16 12:07

7.4 轻量级图片—Picture

Drawable、Bitmap都是比较常用的图形对象类。我们在阅读Android SDK文档还会发现一个类:android.graphics.Picture。那么Picture又是做什么用的呢?

相对于Drawable和Bitmap而言,Picture对象就小巧的多,它并不存储实际的像素,仅仅记录了每个绘制的过程。整个类提供了两个重载形式,其中比较特别的是Picture(Picture src) 从一个Picture对象去实例化操作。

这里有个简单的例子,来详细说明下。

protected void onDraw(Canvas canvas) {

Picture p=new Picture();

// 开始记录绘制过程,这里的Canvas是Picture的Canvas

Canvas c=p.beginRecording(320,480);

// c.drawBitmap() ,drawLine等方法处理

// 结束录制绘制过程

p.endRecording();

PictureDrawable pd=new PictureDrawable(p);

pd.draw(canvas) ;

canvas.drawPicture(p);

}

7.5 Drawable、Bitmap、byte[]之间的转换

Android中有这么多种图片资源, 在处理的时候,会进行一些类型的转换。下面就总结了Drawable、Bitmap、byte[]之间的转换。参考代码如下:

/** Drawable转换成Bitmap(使用Canvas方式) **/

public static Bitmap convertDrawable2BitmapByCanvas(Drawable drawable) {

    Bitmap bitmap = Bitmap

             .createBitmap(

                     drawable.getIntrinsicWidth(),

                     drawable.getIntrinsicHeight(),

                     drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

                             : Bitmap.Config.RGB_565);

    Canvas canvas = new Canvas(bitmap);

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),

             drawable.getIntrinsicHeight());

    drawable.draw(canvas);

    return bitmap;

}

 

/** Drawable转换成Bitmap(通过BitmapDrawable方式) **/

public static Bitmap convertDrawable2BitmapSimple(Drawable drawable) {

    BitmapDrawable bd = (BitmapDrawable) drawable;

    return bd.getBitmap();

}

 

/** Bitmap转换成Drawable **/

public static Drawable convertBitmap2Drawable(Bitmap bitmap) {

    BitmapDrawable bd = new BitmapDrawable(bitmap);

    // 因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

    return bd;

}

 

/** byte[]转换成Bitmap **/

public static Bitmap convertBytes2Bimap(byte[] b) {

    if (b.length == 0) {

        return null;

    }

    return BitmapFactory.decodeByteArray(b, 0, b.length);

}

 

/** Bitmap转换成byte[] **/

public static byte[] convertBitmap2Bytes(Bitmap bm) {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);

    return baos.toByteArray();

}

7.6 Android提供的几种动画效果(Animation)

Android提供了以下两种Animation模式及四种现成的animation:

1)Tween Animation:通过对图像不断做变换产生动画效果,是一种渐变动画。

l  AlphaAnimation:渐变透明度动画效果。

l  ScaleAnimation:渐变尺寸伸缩动画效果。

l  TranslateAnimation:画面转移位置移动动画效果。

l  RotateAnimation:画面转移旋转动画效果。

2)Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。

下面的章节会详细介绍如何利用这些实现各种动画效果。

0 0
原创粉丝点击