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、接下来是案例:

首先看一下效果图:

  旋转拖拽后

布局很简单在此不再给出!直接看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.

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

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

  1. VUE实现前台图片 标注(添加矩形框)、放大、缩小、拖拽 -----个人记录

    VUE实现前台图片 标注(添加矩形框).放大.缩小.拖拽 需求:实现图片上自定义多个矩形选框,选框可移动缩放拖动,图片可以放大缩小.拖拽 ,选框内填充标注文字. 框内填充文字基本都会,不多赘述,后期可 ...

  2. 微信小程序操作图片放大、缩小、旋转、拖拽

    微信小程序操作图片放大.缩小.旋转.拖拽 在开发小程序的时候遇到了上传图片,然后编辑的需求.打算网上找一下相关代码组件的,就不用自己搞这么麻烦.经过一番折腾,还是没有找到如意的,最后自己弄好了,记录一 ...

  3. 微信小程序怎么实现 图片按住一角缩放、旋转、拖拽

    微信小程序怎么实现 图片按住一角缩放.旋转.拖拽 图片一角可以加个小图片,按住来操作 利用movable-view.movable-area 可以实现拖拽缩放.不好旋转 是不是可以利用canvas绘图 ...

  4. uniapp微信小程序图片裁剪插件,支持自定义尺寸、定点等比例缩放、拖动、图片翻转、剪切圆形/圆角图片、定制样式

    qf-image-cropper2.0 图片裁剪插件 1.效果预览: 2.平台支持: 1.支持微信小程序(移动端.PC端.开发者工具) 2.H5平台(2.1.0版本起) 3. 支持APP平台(2.1. ...

  5. android图片底部居中对齐,android开发图片居中的小技巧

    释放双眼,带上耳机,听听看~! 制作UI布局的时候都会出现复杂的LinearLayout嵌套,并且常常会被一些问题混淆,警惕在android中图片居中的小技巧大家都知道吗?别着急,下文是技术狗小编为大 ...

  6. android图片晃动动画,剖析Android动画(图片闪烁、左右摇摆、上下晃动等效果)

    通常我们需要一个item连续的播放某一段动画或者循环的执行某个动画,这里我们就可以用到一下技巧. 一.续播(不知道取什么名字好,就是先播放动画A, 接着播放动画B) 有两种方式: 第一种: 分别定义两 ...

  7. html图片自动移动代码是什么,html图片滚动代码

    html图片向左无缝隙循环滚动代码 向左或向右都可以,无缝隙循环滚动,麻烦请给完整代码,5张图片图片大小用css3实现循环滚动效果: css: #wrap{ width: 200px; height: ...

  8. html语言图片滚动代码,[转载]Html网页图片滚动代码

    style=overflow:hidden;height:100;width:90;> id=butong_net_top2> var speed=30 butong_net_top2.i ...

  9. VUE实现前台图片 标注(添加矩形框)、放大、缩小、拖拽

    需求:实现图片上自定义多个矩形选框,选框可移动缩放拖动,图片可以放大缩小.拖拽 ,选框内填充标注文字. 框内填充文字基本都会,不多赘述,后期可添加选框移除功能(思路右击选框弹出选项删除,获取当前点击选 ...

最新文章

  1. 这一次,你能彻底搞懂 Flink!
  2. 手持机设备公司(WINCE/ANDROID/LINUX)
  3. (转)php-cli模式学习(PHP命令行模式)
  4. bzoj2287【POJ Challenge】消失之物 缺一01背包
  5. LeetCode meituan-003. 小美的跑腿代购(排序)
  6. navicat 添加外键1215错误
  7. 树的非递归前中后序遍历
  8. C语言什么是结构体?初步学习C语言结构体三部曲
  9. 加速器instagram_“类似Instagram过滤器”标记肿瘤图像中的分子细节
  10. 01背包 hihocoder第六周
  11. 浏览器FLASH禁用后无法播放rtmp流怎么办webrtc视频流直播浏览器无插件播放也支持rtmp拉转成webrtc输出
  12. 圣思园 java_圣思园Java8新特性及实战视频教程 下载
  13. android 设置组件背景图片,Android TextView背景颜色与背景图片设置
  14. redission实现分布式锁
  15. permissionerror winerror 5 拒绝访问。
  16. 如何设置Xiuno BBS URL-Rewrite(伪静态设定)
  17. The bean ‘beanNameViewResolver‘, defined in class path resource [cn/afterturn/easypoi/configuration/
  18. python写的点名器(内附源码)
  19. python怎么加逗号_python – 什么是最简单的方法添加逗号到一个整数?
  20. 哈希表+哈希桶简介及实现

热门文章

  1. 区块链安全20种注意的风险
  2. [violet6] 故乡的梦
  3. Roson的Qt之旅#56 QTime用法
  4. iptables实现端口映射(本地和远程端口映射)
  5. 谁说 Vim 不好用?送你一个五彩斑斓的编辑器!
  6. 建筑储能相变材料:两种热性能标准测试方法比较
  7. 解决“未将对象引用设置到对象的实例”
  8. 畅享5android版本,科普华为畅享5怎么root及安卓6.0系统怎么root
  9. 批处理中使用变量嵌套/命令嵌套实现随机密码
  10. android性能测试 内存,测试基础之Android性能测试一:内存