Android开发--Matrix(二)--实现图片的旋转
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(二)--实现图片的旋转相关推荐
- Android之matrix类控制图片的旋转、缩放、移动
在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,他对图片的处理分为四个基本类型: 1.Translate----平移变换 2.Scale----缩放变换 ...
- Pascal游戏开发入门(二):渲染图片
Pascal游戏开发入门(二):渲染图片 渲染静态图片 新增一个Texture,然后Render出来 创建Texture,并获取尺寸 procedure TGame.Init(title: strin ...
- Android开发之拍照后图片旋转的问题
经过测试,国产手机拍照无问题,国外手机拍照后自动选装90度了看图:主要有Google手机和三星手机都会有这个问题 解决办法也很简单说下思路: 首先获取图片被旋转的角度然后通过matrix.postRo ...
- android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...
对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...
- Android开发使用Glide获取图片背景色淡绿色解决办法
第一次写博客,文笔不好,请大家多多关照,欢迎拍砖 在Android开发中,常用的加载图片工具有,Glide,Picasso,Fresco,其中Glide和Picasso使用方法极为相似,相对于Pica ...
- Android开发:设置背景图片
在Android开发中,设置背景图片是一个既简单又常用的方法,由于本人现在需要同时做Android开发,所以Android的开发技能也要不断学习储备,不仅是为了给老板省钱,也是为了增加自己的竞争力.那 ...
- Android开发解决加载图片OOM问题(非常全面 兼顾4 0以下系统)(by 星空武哥)
转载请标明:http://blog.csdn.net/lsyz0021/article/details/51295402 我们项目中经常会加载图片,有时候如果加载图片过多的话,小则导致程序很卡,重则O ...
- Android开发--Matrix(一)--实现图片的动态放大缩小
Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 首先介绍一下矩阵运算.加法和减法就不用说了,太简单了,对应位相加就好.图像处理,主要用到的是 ...
- android图片传输三方框架,Android开发三种第三方图片加载的框架
最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...
最新文章
- Problem A: 平面上的点——Point类 (I)
- 百度Apollo:CTO级无人车大牛不稀缺,我们这也就百八十个吧
- 留言本的漏洞挖掘总结
- Java构建工具, ZeroC ICE, word2vec
- SAP Spartacus central configuration - B2cStorefrontModule
- [转]Multiple outputs from T4 made easy
- codeforces1473 E.Minimum Path(分层图最短路)
- 工作315:uni-修改添加时间的逻辑
- nuxt route 全局管理 route.beforeEach 替代
- destoon入门实例与常见问题汇总
- 1.卷2(进程间通信)---简介
- DBSCAN聚类算法C++实现
- 如何进行在线教育平台开发(源码篇)
- 3dmax计算机组装动画,3dmax怎么做动画,教你3dsmax动画制作流程和基本套路
- python画圆形螺旋线_用Python一秒生成复古像素图片
- docker入门基础(四)
- Unity Shader GrabPass 使用注意的问题
- uniapp获取微信小程序openid
- 9款高质量学习软件,原来学霸都是这么炼成的!
- 联发科彻底慌了,不仅高端市场保不住,中端市场也被高通压制