这一篇,给大家介绍一下ImageVIEw控件的使用,ImageVIEw主要是用来显示图片,可以对图片进行放大、缩小、旋转的功能。
androID:sacleType属性指定ImageVIEw控件显示图片的方式,例如:center表示图像以不缩放的方式显示在ImageVIEw控件的中心,如果设置为fitCenter,表示图像按照比例缩放至合适的位置,并在ImageVIEw控件的中心。
首先我们开发一个简单的案例,实现图片的放大缩小和旋转:
先看看实现的效果:
缩放截图1:
缩放截图2:
旋转截图1:
旋转截图2:
在实现图片的缩放和旋转时,我们都需要用到androID.graphics.Matrix这个类,对于Matrix在API中的介绍如下:
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.).
本实例中使用到androID.graphics.Matrix的 setRotate方法来设置旋转角度,以下是API中的该方法介绍:
voID setRotate(float degrees,float px,float py)Set the matrix to rotate by the specifIEd number of degrees,with a pivot point at (px,py).
源代码:
MainActivity.java
[HTML] vIEw plaincopyprint?package com.imagevIEw.activity; import com.imagevIEw.activity.R; import androID.app.Activity; import androID.graphics.Bitmap; import androID.graphics.Matrix; import androID.graphics.drawable.BitmapDrawable; import androID.os.Bundle; import androID.util.displayMetrics; import androID.Widget.ImageVIEw; import androID.Widget.linearLayout; import androID.Widget.Seekbar; import androID.Widget.Seekbar.OnSeekbarchangelistener; public class MainActivity extends Activity implements OnSeekbarchangelistener { private int minWIDth = 80; private ImageVIEw imageVIEw; private Seekbar seekbar1; private Seekbar seekbar2; private Matrix matrix = new Matrix(); @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); imageVIEw = (ImageVIEw) findVIEwByID(R.ID.imagevIEw1); seekbar1 = (Seekbar) findVIEwByID(R.ID.seekbar1); seekbar2 = (Seekbar) findVIEwByID(R.ID.seekbar2); seekbar1.setonSeekbarchangelistener(this); seekbar2.setonSeekbarchangelistener(this); // 定义一个displayMetrics对象,用来显示旋转的图像 displayMetrics dm = new displayMetrics(); // 根据手机屏幕大小来缩放 getwindowManager().getDefaultdisplay().getMetrics(dm); seekbar1.setMax(dm.wIDthPixels - minWIDth); } @OverrIDe public voID onProgressChanged(Seekbar seekbar,int progress,boolean fromUser) { switch (seekbar.getID()) { case R.ID.seekbar1: int newWIDth = progress + minWIDth; int newHeight = (int) (newWIDth * 3 / 4); imageVIEw.setLayoutParams(new linearLayout.LayoutParams(newWIDth,newHeight)); break; case R.ID.seekbar2: Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.pic)).getBitmap(); // 设置旋转角度 matrix.setRotate(progress); // 重新绘制Bitmap bitmap = Bitmap.createBitmap(bitmap,bitmap.getWIDth(),bitmap.getHeight(),matrix,true); imageVIEw.setimageBitmap(bitmap); break; } } @OverrIDe public voID onStartTrackingtouch(Seekbar seekbar) { } @OverrIDe public voID onStopTrackingtouch(Seekbar seekbar) { } }
布局文件main.xml
<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical" > <ImageVIEw androID:layout_wIDth="200dp" androID:layout_height="150dp" androID:scaleType="fitCenter" androID:background="#FFFFFF" androID:src="@drawable/pic" androID:ID="@+ID/imagevIEw1"/> <Seekbar androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:max="100" androID:ID="@+ID/seekbar1"/> <TextVIEw androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:text="拖动来缩放图片" /> <Seekbar androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:max="100" androID:ID="@+ID/seekbar2"/> <TextVIEw androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:text="拖动来旋转图片" /> </linearLayout>
最后说明一点,要在ImageVIEw中显示的图片进行旋转,请选择一张符合Matrix的3*3矩阵的图片,否则在旋转过程中超过屏幕宽度会引起报错,本例中选取的是一张正方形的图片,如果是长方形的建议做一下代码逻辑判断处理。
以上就是关于Matrix的实现效果,希望对大家的学习有所帮助。
以上是内存溢出为你收集整理的Android UI之ImageView实现图片旋转和缩放全部内容,希望文章能够帮你解决Android UI之ImageView实现图片旋转和缩放所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)