Android UI之ImageView实现图片旋转和缩放

Android UI之ImageView实现图片旋转和缩放,第1张

概述这一篇,给大家介绍一下ImageView控件的使用,ImageView主要是用来显示图片,可以对图片进行放大、缩小、旋转的功能。

这一篇,给大家介绍一下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实现图片旋转和缩放所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存