使用Matrix控制图形、组件的变换
来源:互联网 发布:java抢票软件开发源码 编辑:程序博客网 时间:2024/06/05 03:13
Matrix是Android提供的一个矩阵工具类,它本身并不能对图像或组件进行变换,但它可与其他API结合起来控制图形、组件的变换。使用Matrix控制变换的步骤如下:
1、获取Matrix对象,该对象既可新创建,也可直接获取其他对象内封装的Matrix(Transformation对象内部就封装了Matrix)。
2、调用Matrix的方法进行平移、旋转、缩放、倾斜等。
3、将Matrix所做的变换应用到指定图形或组件。
Matrix提供了如下方法来控制变换:
、
一旦对Matrix进行了变换,然后就可以应用Matrix对图形进行控制了,比如Canvas就提供了一个
drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)方法。
下面通过一个示例来演示Matrix的使用,代码如下:
Activity:
package com.guyun.activity;import com.guyun.matrixtest.R;import android.os.Bundle;import android.app.Activity;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}
View:
package com.guyun.view;import com.guyun.matrixtest.R;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;public class DrawMatrixView extends View {// 图片资源对象private Bitmap bitmap;private Paint paint = new Paint();// Matrix实例private Matrix matrix = new Matrix();private float translateX;private float translateY;private float scaleX;private float scaleY;private int degress;public DrawMatrixView(Context context, AttributeSet attrs) {super(context, attrs);// 获取图片资源bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);new Thread() {public void run() {while (true) {translateX++;translateY++;degress++;scaleX += 0.01;scaleY += 0.01;try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}// invalidate():在UI线程中使用// postInvalidate():在非UI线程中使用postInvalidate();}}}.start();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// set方法是设置变换类型。后面设置的类型会替换前面设置的类型// pre方法是保持原有的类型基础之上增加新的类型// 设置位移matrix.setTranslate(translateX, translateY);// 设置倾斜matrix.preSkew(0.5f, 0.5f);// 设置旋转,后面2个参数为变换的中心位置,下同matrix.preRotate(degress, bitmap.getWidth() / 2, bitmap.getHeight() / 2);// 设置缩放,scaleX,scaleY都为1时图片为正常大小,比1大为放大了的效果,比1小为缩小了的效果matrix.preScale(scaleX, scaleY, bitmap.getWidth() / 2,bitmap.getHeight() / 2);canvas.drawBitmap(bitmap, matrix, paint);}}
布局XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"><com.guyun.view.DrawMatrixView android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout>
- 使用Matrix控制图形、组件的变换
- 使用Matrix控制图像或组件变换的步骤
- 使用 Matrix控制图片的变换
- android 图形特效处理 Matrix控制变换
- Android:使用Matrix控制变换
- Android Matrix图形变换
- Matrix控制变换
- 使用Matrix进行图形变换来完成图片在屏幕上的全屏显示(屏幕自适应)
- 图形变换Matrix(从零开始学Android)
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
- 安卓图形matrix矩阵变换的数学原理及代码
- Canvas的图形变换
- 图形的几何变换
- 图形的变换
- 积土成山~电路设计及测试经验积累
- Eight poj1077 广度优先搜索
- 关于UIColor修改无效的解决
- 5.6.4 映射集合属性:Set集合属性
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 使用Matrix控制图形、组件的变换
- php实现当前用户在线人数
- Cracking the coding interview--Q9
- c++ utf8与std::string字符编码转换
- 蓝牙UUID查询表
- The Call of the Wild——4、The new lead-dog
- 2013 whu暑假集训选拔#2
- 影响Java EE性能的十大问题
- Send Meeting Request With C#