1、首先说一下两个类:
Matrix
Class Overview
The Matrix class holds a 3x3 matrix for transforming coordinates. Matrix does not have a constructor, so it must be explicitly initialized using either reset() - to construct an identity matrix, or one of the set..() functions (e.g. setTranslate, setRotate,
etc.).
矩阵类拥有3 x3的坐标变换矩阵。没有一个构造函数矩阵,所以它必须显式初始化的使用或重置()-如何构建一个矩阵,或者一个场景……()的功能(例如,setRotate setTranslate等。)
Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set,post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
接下来我们用到了两个方法:
平移方法:两个参数分别是要移到的x、y坐标
<nobr>boolean</nobr> |
<nobr><span class="sympad" style="margin-right:2px"><a href="file:///E:/android/android/android-sdk-windows/docs/reference/android/graphics/Matrix.html#postTranslate(float,%20float)" style="color:rgb(0,102,153); text-decoration:none">postTranslate</a></span>(float
dx, float dy)</nobr>
Postconcats the matrix with the specified translation.
|
和旋转方法:第一个参数是旋转多少度,正数是顺时针,负数是逆时针;第二三参数是按某个点旋转的x、y坐标;
<nobr>boolean</nobr> |
<nobr><span class="sympad" style="margin-right:2px"><a href="file:///E:/android/android/android-sdk-windows/docs/reference/android/graphics/Matrix.html#postRotate(float,%20float,%20float)" style="color:rgb(0,102,153); text-decoration:none">postRotate</a></span>(float
degrees, float px, float py)</nobr>
Postconcats the matrix with the specified rotation.
|
PointF
Class Overview
PointF holds two float coordinates
PointF有两个浮点坐标
我们要用到该类的一个方法:设置点的x和y坐标
<nobr>final void</nobr> |
<nobr><span class="sympad" style="margin-right:2px"><a href="file:///E:/android/android/android-sdk-windows/docs/reference/android/graphics/PointF.html#set(float,%20float)" style="color:rgb(0,102,153); text-decoration:none">set</a></span>(float x, float y)</nobr>
Set the point's x and y coordinates
|
2、接下来是案例:
首先看一下效果图:
旋转拖拽后
布局很简单在此不再给出!直接看java代码:
public class MovePictureActivity extends Activity implements OnClickListener {
private Button button1, button2;
private ImageView image;
PointF startPoint = new PointF();// 有两PointF浮坐标
Matrix matrix = new Matrix();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
image = (ImageView) findViewById(R.id.image);
image.setOnTouchListener(new ImageViewOnTouchListener());// 为image绑上触摸事件监听
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
matrix.postRotate(90, image.getWidth() / 2, image.getHeight() / 2);// 顺时针旋转90度,并且以image.getWidth()/2、image.getHeight()/2为中心旋转;
break;
case R.id.button2:
matrix.postRotate(-90, image.getWidth() / 2, image.getHeight() / 2);// 逆时针旋转90度
break;
}
image.setImageMatrix(matrix);
}
private class ImageViewOnTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {// 这里取出来的是event.getAction()返回的值的低八位,MotionEvent.ACTION_MASK是255,
case MotionEvent.ACTION_DOWN:
startPoint.set(event.getX(), event.getY());
break;
case MotionEvent.ACTION_MOVE:// 移动过程,该事件会不断被触发
float dx = event.getX() - startPoint.x;
float dy = event.getY() - startPoint.y;
matrix.postTranslate(dx, dy);
startPoint.set(event.getX(), event.getY());
break;
}
image.setImageMatrix(matrix);
return true;
}
}
}
为image绑定监听事件,
image.setOnTouchListener(new ImageViewOnTouchListener());// 为image绑上触摸事件监听
View.OnTouchListener
该接口:
Interface definition for a callback to be invoked when a touch event is dispatched to this view. The callback will be invoked before the touch event is given to the view.
接口定义作为一个回调函数被调用时被派遣去触摸事件这一观点。回调函数被调用之前会触摸事件是给你尽情的观看。
原代码下载地址:http://download.csdn.net/download/rhljiayou/4286882
分享到:
相关推荐
jQuery仿新浪微博图片顺时针(逆时针)旋转效果,供大家一起共同分享学习。
一个实现图像的旋转效果实例,由VB6.0编写,前几年的源码,本程序实现图片的逆时针旋转90度,单击窗口中的按钮即可实现旋转功能,这部分代码,可参考如下代码: 逆时针旋转90度 Private Sub Command2_Click() ...
ANDROID,实现imageview的各种操作,手势放大,缩小,旋转等
数字逆时针螺旋式输出,这个描述还要20字以上的说。。。。。
对图像进行旋转变换,可顺时针,逆时针多次旋转
判断多边形的顺逆时针性,主要用于shapefile文件的判断空洞
Imageshow基于C#的图片浏览器,包含功能读取路径下的所有图片及其显示 放大缩小旋转等功能 读取路径下的所有图片形成缩略图 点击缩略图可以显示图片 可以正常显示 可以拉伸显示 可以放大显示 可以缩小显示 可以切换...
完整版图象处理—顺逆时针图片转换.rar
HTML5焦点图可以实现很多炫酷的效果,就像这...今天我们再来分享一款另外一种效果的HTML5焦点图插件,该焦点图利用CSS3的属性实现了图片旋转的动画效果,既可以顺时针旋转,也可以逆时针旋转,并且图片旋转也比较流畅。
仪表盘可以实现顺时针和逆时针的摆动,指针精确指定位置
鼠标在程序界面窗口上不停地移动(画圆),要求: (1)实时检测画圆的方向:顺时针还是逆时针。 (2)实时计算出有效的圆的个数。(有效的圆:半径大于指定像素值A,小于指定像素值B) (3)准确率足够高,尽量...
JavaScript写的旋转文字动画效果导航代码,鼠标移动导航上,文字做逆时针旋转,兼容主流浏览器
一副图像逆时针旋转60°,采用双线性插值的方法
图象处理—顺逆时针图片转换.rar
易语言图片旋转源码,图片旋转,上下翻转图片,左右翻转图片,顺时针翻转图片,逆时针翻转图片
有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!
canvas图片旋转,每次顺时针或逆时针旋转90度后,宽度自适应容器宽度,等比缩放
图象处理—顺逆时针图片转换.e.rar