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:顺序播放事先做好的图像,是一种画面转换动画。
下面的章节会详细介绍如何利用这些实现各种动画效果。