Android Matrix的使用过程
来源:互联网 发布:随机森林优化 编辑:程序博客网 时间:2024/05/21 20:09
Matrix是一个强大的计算工具,它能够是一个View里面所有像素的坐标进行各种变换,从而能够达到一般的图形操作所不能达到的效果。可以说不会使用Matrix在制作android特效的路上还是一个初学者。
先说一下矩阵各坐标的含义
这里可以查看Matrix的代码得到。那么这个矩阵分别代表了什么呢,这里通过他们的名字可以看出,scale是缩放,skew是错切,trans是平移,persp代表透视(官方文档中,也没有详细讲解,透视在这里只做简单介绍)。这里需要把矩阵根据他们的作用划分为4块:
我首先上一个模板代码,接下来所有的实验都是在此代码基础上进行改动。
public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); }}public class MyView extends View { private int textX=20,textY=20; private Scroller mScroller; public MyView(Context context) { super(context); setFocusable(true); mScroller=new Scroller(context); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.sample)).getBitmap(); Matrix matrix = new Matrix(); canvas.drawBitmap(bitmap, matrix, paint); matrix.setTranslate(400, 400); canvas.drawBitmap(bitmap, matrix, paint); super.onDraw(canvas); }}
- setTranslate
Public void setTranslate(float x,float y);
平移,能够改变对象的坐标使其移动。
2 setScale
public void setScale(float sx, float sy, float px, float py)
public void setScale(float sx, float sy)
放缩,sx,sy代表了x轴和y轴缩放的倍数,px,py代表缩放的中心。
3 setRotate
public void setRotate(float degrees, float px, float py)
public void setRotate(float degrees)
旋转,degrees是角度,px和py是旋转的中心。
使用如下:
matrix.setRotate(180,bitmap.getWidth()/2,bitmap.getHeight()/2);
4 setSinCos
public void setSinCos(float sinValue, float cosValue, float px, float py)
public void setSinCos(float sinValue, float cosValue)
也是旋转,但是根据sin和cos的值来运算的
这个方法乍一看可能有点蒙,其实在前面的原理中,我们讲解了一个旋转的例子,他最终的矩阵效果是这样的:
5 setSkew
public void setSkew(float kx, float ky, float px, float py)
public void setSkew(float kx, float ky)
错切,这里kx,ky分别代表了x,y上的错切因子,px,py代表了错切的中心。
这是一个种像把有弹性的纸,进行拉动一样的效果。
先是set系列的函数只能用一次,如果有几个set函数,结果只会最后一个set函数起作用。
还有preXXXX:以pre开头,例如preTranslate ,右乘
postXXXX:以post开头,例如postScale,这是左乘
这指的是矩阵相乘的循序不同,如下:
可以看出平移和放缩都起了作用。
这里平移收到了放缩的影响,所以这pre和post记得区别。
- Android Matrix的使用过程
- android Matrix的使用。。。
- Android---Matrix类的使用
- Android---Matrix类的使用
- android Matrix工具的使用
- Android---Matrix类的使用
- Android---Matrix类的使用
- Android---Matrix类的使用
- Android---Matrix类的使用
- Android---Matrix类的使用
- Android中Matrix的使用
- Android---Matrix类的使用
- 我的Android进阶之旅------>Android通过使用Matrix旋转图片来模拟碟片加载过程
- android-button与Matrix的使用
- android 绘图Matrix的使用介绍
- Android中的Matrix类的使用
- Android 图像绘制之Matrix 的使用
- Android Matrix几个方法的使用
- 一种基于特征点匹配的图像检索方法的opencv实现
- iOS多线程编程篇: Operation 对象 与 Operation Queue
- ionic2/ionic3 启动慢问题解决(apk包也变小了)
- CodeForces
- docker数据卷
- Android Matrix的使用过程
- BootStrap基础入门
- Java核心技术II:解析XML文档
- SSM第一次握手
- Java开发注意事项
- Platform Cable USB 的驱动重新安装方法
- 屏蔽掉不能缩放界面-支持ie-chrome
- scala 关于正则匹配器的取值问题
- Tomcat的安装配置与JavaWeb入门教程