Matrix功能很是强大,利用这个类提供的一系列方法,我们可以实现图片的旋转。

下面以一个例子说明实现方法。

首先,我们看下实现的截图:

下面给出具体的实现代码:

1.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:background="@drawable/white"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/myTextView1"android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff0000"android:text="@string/app_name"/><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:id="@+id/myButton1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/str_button1" /><ImageViewandroid:id="@+id/myImageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /><Buttonandroid:id="@+id/myButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/str_button2" /></LinearLayout>
</LinearLayout>

2.主程序的实现

public class EX04_24 extends Activity
{private Button mButton1;private Button mButton2; private TextView mTextView1; private ImageView mImageView1; private int ScaleTimes; private int ScaleAngle; /** Called when the activity is first created. */ @Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.main);mButton1 =(Button) findViewById(R.id.myButton1);mButton2 =(Button) findViewById(R.id.myButton2); mTextView1 = (TextView) findViewById(R.id.myTextView1); mImageView1 = (ImageView) findViewById(R.id.myImageView1); //定义旋转的角度和图像转变的比例(大小)ScaleTimes = 1; ScaleAngle = 1; final Bitmap mySourceBmp = BitmapFactory.decodeResource(getResources(), R.drawable.hippo); final int widthOrig = mySourceBmp.getWidth(); final int heightOrig = mySourceBmp.getHeight(); /* 程序刚执行,加载默认的Drawable */ mImageView1.setImageBitmap(mySourceBmp); /* 向左选转按钮 */mButton1.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) { // TODO Auto-generated method stub ScaleAngle--; if(ScaleAngle<-5) {ScaleAngle = -5; } /* ScaleTimes=1,维持1:1的宽高比例*/ int newWidth = widthOrig * ScaleTimes;int newHeight = heightOrig * ScaleTimes; float scaleWidth = ((float) newWidth) / widthOrig;float scaleHeight = ((float) newHeight) / heightOrig; Matrix matrix = new Matrix(); /* 使用Matrix.postScale设定维度 */matrix.postScale(scaleWidth, scaleHeight);/* 使用Matrix.postRotate方法旋转Bitmap*///matrix.postRotate(5*ScaleAngle); matrix.setRotate(5*ScaleAngle); /* 建立新的Bitmap对象 */Bitmap resizedBitmap = Bitmap.createBitmap(mySourceBmp, 0, 0, widthOrig, heightOrig, matrix, true);/**/ BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap); mImageView1.setImageDrawable(myNewBitmapDrawable); mTextView1.setText(Integer.toString(5*ScaleAngle));}});/* 向右选转按钮 */mButton2.setOnClickListener(new Button.OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stub ScaleAngle++; if(ScaleAngle>5) { ScaleAngle = 5; } /* ScaleTimes=1,维持1:1的宽高比例*/ int newWidth = widthOrig * ScaleTimes; int newHeight = heightOrig * ScaleTimes; /* 计算旋转的Matrix比例 */ float scaleWidth = ((float) newWidth) / widthOrig; float scaleHeight = ((float) newHeight) / heightOrig; Matrix matrix = new Matrix();/* 使用Matrix.postScale设定维度 */matrix.postScale(scaleWidth, scaleHeight); /* 使用Matrix.postRotate方法旋转Bitmap*///matrix.postRotate(5*ScaleAngle);matrix.setRotate(5*ScaleAngle);/* 建立新的Bitmap对象 */ Bitmap resizedBitmap = Bitmap.createBitmap(mySourceBmp, 0, 0, widthOrig, heightOrig, matrix, true);/**/ BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap); mImageView1.setImageDrawable(myNewBitmapDrawable); mTextView1.setText(Integer.toString(5*ScaleAngle)); } }); } }

Android开发--Matrix(二)--实现图片的旋转相关推荐

  1. Android之matrix类控制图片的旋转、缩放、移动

    在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,他对图片的处理分为四个基本类型: 1.Translate----平移变换 2.Scale----缩放变换 ...

  2. Pascal游戏开发入门(二):渲染图片

    Pascal游戏开发入门(二):渲染图片 渲染静态图片 新增一个Texture,然后Render出来 创建Texture,并获取尺寸 procedure TGame.Init(title: strin ...

  3. Android开发之拍照后图片旋转的问题

    经过测试,国产手机拍照无问题,国外手机拍照后自动选装90度了看图:主要有Google手机和三星手机都会有这个问题 解决办法也很简单说下思路: 首先获取图片被旋转的角度然后通过matrix.postRo ...

  4. android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  5. Android开发使用Glide获取图片背景色淡绿色解决办法

    第一次写博客,文笔不好,请大家多多关照,欢迎拍砖 在Android开发中,常用的加载图片工具有,Glide,Picasso,Fresco,其中Glide和Picasso使用方法极为相似,相对于Pica ...

  6. Android开发:设置背景图片

    在Android开发中,设置背景图片是一个既简单又常用的方法,由于本人现在需要同时做Android开发,所以Android的开发技能也要不断学习储备,不仅是为了给老板省钱,也是为了增加自己的竞争力.那 ...

  7. Android开发解决加载图片OOM问题(非常全面 兼顾4 0以下系统)(by 星空武哥)

    转载请标明:http://blog.csdn.net/lsyz0021/article/details/51295402 我们项目中经常会加载图片,有时候如果加载图片过多的话,小则导致程序很卡,重则O ...

  8. Android开发--Matrix(一)--实现图片的动态放大缩小

    Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作.  首先介绍一下矩阵运算.加法和减法就不用说了,太简单了,对应位相加就好.图像处理,主要用到的是 ...

  9. android图片传输三方框架,Android开发三种第三方图片加载的框架

    最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...

最新文章

  1. Problem A: 平面上的点——Point类 (I)
  2. 百度Apollo:CTO级无人车大牛不稀缺,我们这也就百八十个吧
  3. 留言本的漏洞挖掘总结
  4. Java构建工具, ZeroC ICE, word2vec
  5. SAP Spartacus central configuration - B2cStorefrontModule
  6. [转]Multiple outputs from T4 made easy
  7. codeforces1473 E.Minimum Path(分层图最短路)
  8. 工作315:uni-修改添加时间的逻辑
  9. nuxt route 全局管理 route.beforeEach 替代
  10. destoon入门实例与常见问题汇总
  11. 1.卷2(进程间通信)---简介
  12. DBSCAN聚类算法C++实现
  13. 如何进行在线教育平台开发(源码篇)
  14. 3dmax计算机组装动画,3dmax怎么做动画,教你3dsmax动画制作流程和基本套路
  15. python画圆形螺旋线_用Python一秒生成复古像素图片
  16. docker入门基础(四)
  17. Unity Shader GrabPass 使用注意的问题
  18. uniapp获取微信小程序openid
  19. 9款高质量学习软件,原来学霸都是这么炼成的!
  20. 联发科彻底慌了,不仅高端市场保不住,中端市场也被高通压制

热门文章

  1. 微软提供支持Windows 10预览版和EdgeHTML 14的预配置虚拟主机
  2. box-sizing 属性
  3. 算法导论-MIT笔记
  4. 前端每日实战:60# 视频演示如何用纯 CSS 创作一块乐高积木
  5. MaxCompute跨Region数据迁移指导手册
  6. vue 1.0和vue 2.0的变化和区别
  7. Servlet -- 重定向
  8. GPUImageMovieWriter实现暂停录制,重新录制
  9. Vue2.0学习笔记一 :各种表达式
  10. java中Arrays.sort()实现原理