初学Android,图形图像之Matrix(二十九)
2012-08-20 17:02
267 查看
Matrix类可以控制图形的平移,旋转,缩放,倾斜,也可以控制View组件的平移,旋转,倾斜等
下面的例子postInvalidate方法会重绘,随之调用onDraw方法,在onDraw方法里再对位图进行缩放和倾斜操作
在Main.xml引用自定义的View组件
下面的例子postInvalidate方法会重绘,随之调用onDraw方法,在onDraw方法里再对位图进行缩放和倾斜操作
package WangLi.Graphics.Matrix; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; public class MyView extends View { //初始的图片资源 private Bitmap bitmap; //Matrix实例 private android.graphics.Matrix matrix = new android.graphics.Matrix(); //设置倾斜度 private float sx = 0.0f; //位图宽和高 private int width,height; //缩放比例 private float scale = 1.0f; //判断缩放还是旋转 private boolean isScale = false; public MyView(Context context, AttributeSet attrs) { super(context, attrs); //获得位图 bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.psb)).getBitmap(); //获得位图宽 width = bitmap.getWidth(); //获得位图高 height = bitmap.getHeight(); //使当前视图获得焦点 this.setFocusable(true); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); //重置Matrix matrix.reset(); if(!isScale) { //旋转Matrix matrix.setSkew(sx, 0); } else { //缩放Matrix matrix.setScale(scale, scale); } //根据原始位图和Matrix创建新图片 Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); //绘制新位图 canvas.drawBitmap(bitmap2, matrix, null); } public boolean onKeyDown(int KeyCode,KeyEvent event) { switch(KeyCode) { //向左倾斜 case KeyEvent.KEYCODE_DPAD_LEFT: isScale = false; sx += 0.1; postInvalidate(); break; //向右倾斜 case KeyEvent.KEYCODE_DPAD_RIGHT: isScale = false; sx -= 0.1; postInvalidate(); break; //放大 case KeyEvent.KEYCODE_DPAD_UP: isScale = true; if(scale < 2.0) scale += 0.1; postInvalidate(); break; //缩小 case KeyEvent.KEYCODE_DPAD_DOWN: isScale = true; if(scale > 0.5) scale -= 0.1; postInvalidate(); break; } return super.onKeyDown(KeyCode, event); } }
在Main.xml引用自定义的View组件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <WangLi.Graphics.Matrix.MyView android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>下面是效果
相关文章推荐
- 初学Android,图形图像之游戏画面中飞行的飞机(三十)
- 初学Android,图形图像之补间动画(三十六)
- Android|图形图像之Matrix
- 初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)
- 初学Android,图形图像之使用SurfaceView(四十)
- 初学Android,图形图像之使用Path类
- 初学Android,图形图像之在指定点(坐标)播放动画(三十五)
- 初学Android,图形图像之使用双缓冲画图(二十七)
- 初学Android,图形图像之游戏画面中飞行的飞机(三十一)
- 初学Android,图形图像之混合使用逐帧动画和补间动画(三十七)
- Android学习之——图形图像处理(使用Matrix控制变换)(二)
- 初学Android,图形图像之自定义补间动画(三十八)
- Android学习之——图形图像处理(使用Matrix控制变换)(二)
- 初学Android,图形图像之使用drawBitmapMesh扭曲图像(三十二)
- 初学Android,图形图像之使用Path类(二十六)
- 初学Android,图形图像之使用双缓冲画图(二十七)
- 初学Android,图形图像之使用SurfaceView(三十九)
- Android L(5.0)源码之图形与图像处理之图形特效——Matrix
- 初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)
- 初学Android,图形图像之打砖块游戏(二十八)