说明在代码中已经注释
XML代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_pic"android:layout_width="match_parent"android:layout_height="200dip"android:background="@android:color/black"android:scaleType="fitCenter"android:src="@drawable/bg"/><!-- 设置图片的显示方式:把图片按比例扩大/缩小到view的宽度,居中显示 --><LinearLayoutandroid:layout_marginTop="310dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><SeekBarandroid:id="@+id/sb_one"android:layout_width="match_parent"android:layout_height="wrap_content"android:progress="100"/><TextViewandroid:id="@+id/text1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="15dp"android:text="拖动来缩放图片"android:textColor="@android:color/black"android:textSize="20dp"/><SeekBarandroid:id="@+id/sb_two"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:progress="50"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="15dp"android:text="拖动来旋转图片"android:textColor="@android:color/black"android:textSize="20dp"/></LinearLayout>
</RelativeLayout>
Activity代码
package com.zjs.imagerotate;import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener {private ImageView iv_pic;private SeekBar sb_one;private SeekBar sb_two;private Matrix matrix;@Overrideprotected void onCreate(Bundle savedInstanceState) {setTitle("imageView实现图片缩放和旋转");super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv_pic = (ImageView) findViewById(R.id.iv_pic);sb_one = (SeekBar) findViewById(R.id.sb_one);sb_two = (SeekBar) findViewById(R.id.sb_two);//设置SeekBar的progress值改变监听事件sb_one.setOnSeekBarChangeListener(this);sb_two.setOnSeekBarChangeListener(this);matrix = new Matrix();// 1)设置图片放大缩小效果 //// 第一步:将<ImageView>标签中的android:scaleType设置为"fitCenter" //// 第二步:获取屏幕的宽度 //// 第三步:设置seekBar的最大progree值为屏幕宽度 //// 第四步:设置imageview的布局参数,也就是宽和高,也就是画布的宽高// 设置图片放大缩小效果// 第一步:获取屏幕的宽度DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);// 第二步:设置seekBar的最大progree值为屏幕宽度sb_one.setMax(dm.widthPixels);}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {// TODO Auto-generated method stubswitch (seekBar.getId()) {case R.id.sb_one:// 放大或缩小int width = progress;int height = progress * 3 / 4;// 第三步:设置imageview的布局参数,也就是宽和高,也就是画布的宽高iv_pic.setLayoutParams(new RelativeLayout.LayoutParams(width, height));break;case R.id.sb_two:// 旋转// 设置旋转度数// 设置图片旋转方法// 第一步:给matrix设置角度,用于新的bitmapmatrix.setRotate((int) (progress * 3.60));// 第二步:获取bitmap资源BitmapDrawable bitmapDrawable = (BitmapDrawable) (getResources().getDrawable(R.drawable.bg));Bitmap bitmap = bitmapDrawable.getBitmap();// 第三步:重建bitmap用于显示Bitmap newBitmap = bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);// 第四步:给imageview设置新的bitmapiv_pic.setImageBitmap(newBitmap);break;default:break;}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto -generated method stub}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto -generated method stub}
}
效果图