图片翻转代码linux,Android实现图片顺时逆时旋转及拖拽显示效果

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坐标

boolean

postTranslate(float dx, float dy)

Postconcats the matrix with the specified translation.和旋转方法:第一个参数是旋转多少度,正数是顺时针,负数是逆时针;第二三参数是按某个点旋转的x、y坐标;

boolean

postRotate(float degrees, float px, float py)

Postconcats the matrix with the specified rotation.

PointF

Class Overview

PointF holds two float coordinatesPointF有两个浮点坐标

我们要用到该类的一个方法:设置点的x和y坐标

final void

set(float x, float y)

Set the point's x and y coordinates2、接下来是案例:

首先看一下效果图:

debe687adbd225f2e4f387de79d90946.gif  旋转拖拽后

995e128048eca3601045138031c42871.gif

布局很简单在此不再给出!直接看java代码:

[java]

publicclassMovePictureActivityextendsActivityimplementsOnClickListener {

privateButton button1, button2;

privateImageView image;

PointF startPoint =newPointF();// 有两PointF浮坐标

Matrix matrix =newMatrix();

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

init();

}

privatevoidinit() {

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(newImageViewOnTouchListener());// 为image绑上触摸事件监听

}

@Override

publicvoidonClick(View v) {

switch(v.getId()) {

caseR.id.button1:

matrix.postRotate(90, image.getWidth() /2, image.getHeight() /2);// 顺时针旋转90度,并且以image.getWidth()/2、image.getHeight()/2为中心旋转;

break;

caseR.id.button2:

matrix.postRotate(-90, image.getWidth() /2, image.getHeight() /2);// 逆时针旋转90度

break;

}

image.setImageMatrix(matrix);

}

privateclassImageViewOnTouchListenerimplementsOnTouchListener {

@Override

publicbooleanonTouch(View v, MotionEvent event) {

switch(event.getAction() & MotionEvent.ACTION_MASK) {// 这里取出来的是event.getAction()返回的值的低八位,MotionEvent.ACTION_MASK是255,

caseMotionEvent.ACTION_DOWN:

startPoint.set(event.getX(), event.getY());

break;

caseMotionEvent.ACTION_MOVE:// 移动过程,该事件会不断被触发

floatdx = event.getX() - startPoint.x;

floatdy = event.getY() - startPoint.y;

matrix.postTranslate(dx, dy);

startPoint.set(event.getX(), event.getY());

break;

}

image.setImageMatrix(matrix);

returntrue;

}

}

}为image绑定监听事件,

[java]

image.setOnTouchListener(newImageViewOnTouchListener());// 为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.

接口定义作为一个回调函数被调用时被派遣去触摸事件这一观点。回调函数被调用之前会触摸事件是给你尽情的观看。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值