activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/ic_launcher"/>
<!--
在这里总结一下scaleType属性的意思:
1、matrix:保持原图的效果(不随着ImageView的大小而变化),图片的左上角和ImageView的左上角对齐
2、fitXY: 不保持原图效果,x、y方向都进行缩放,也就是填充的效果
3、fitStart:不保持原图的效果,x、y按等比例的方式进行缩放到ImageView的宽度大小(所谓宽度就是边短的),图片的位置在ImageView开始的位置(左上角即为开始位置)
4、fitCenter:不保持原图的效果,x、y按等比例的方式进行缩放到ImageView的宽度大小(所谓宽度就是边短的),图片的位置在ImageView中间的位置
5、fitEnd:不保持原图的效果,x、y按等比例的方式进行缩放到ImageView的宽度大小(所谓宽度就是边短的),图片的位置在ImageView末尾的位置
6、center:保持原图的大小,当图片的大小>ImageView的大小时候,所显示的是图片中间的区域;当图片的大小<ImageView的大小时候,会位于ImageView的中心而不是屏幕的中心
7、centerCrop:不保持原图的大小,x、y等比例缩放到ImageView的高度大小(所谓高度就是边长的),图片居中显示,溢出部分不显示
8、centerInside:不保持原图的大小,当图片的大小>ImageView的大小,图片会按图片的宽高进行缩放到能够显示完整图片为止,当图片的大小<ImageView的大小,图片会保持原来的效果,居中显示
以上都为自己的总结,如有疑问可以自己进行尝试。
-->
<TextView android:id="@+id/tv1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="对图片进行缩放"/> <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="对图片进行旋转"/> <SeekBar android:id="@+id/seekBar2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity.java:
package com.example.myimageview;
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.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity implements OnSeekBarChangeListener {
int windowWidth;
int windowHeight;
private Matrix matrix = new Matrix();
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SeekBar seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
iv = (ImageView) findViewById(R.id.iv);
seekBar1.setOnSeekBarChangeListener(this);
seekBar2.setOnSeekBarChangeListener(this);
//得到屏幕的宽高
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
windowWidth = dm.widthPixels;
windowHeight = dm.heightPixels;
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
//在这里处理相关的逻辑代码
if(seekBar.getId() == R.id.seekBar1){
//在这里执行缩放的操作
iv.setLayoutParams(new LinearLayout.LayoutParams(100+progress, windowHeight*2/5));
//之前我是这么写的iv.setlayoutParams(new ViewGroup.LayoutParams(100+progress, windowHeight*2/5))发生ViewGroup.LayoutParams向Linearlayout.LayoutParams强制转换错误
/*
* Set the layout parameters associated with this view. These supply parameters to the parent of this view specifying how it should be arranged.
* 此话的意思是设置此视图的布局关联的布局参数,此视图的父视图指定安排它的参数。(因为此视图的父视图是Linearlayout,当你写LinearLayout的父类ViewGroup的时候就会发生强转的错误)
*/
}else{
//在这里执行旋转的操作
matrix.setRotate(progress);
@SuppressWarnings("deprecation")
Bitmap bp = ((BitmapDrawable)(getResources().getDrawable(R.drawable.ic_launcher))).getBitmap();
/*
* 上面的是Drawable向Bitmap进行转化
* Bitmap向BitmapDrawable转化的时候直接BitmapDrawable bd = new BitmapDrawable(Bitmap bit)
*/
//上面已经对矩阵进行了旋转,在这里只要由这个矩阵生成Bitmap就ok
Bitmap scale_bp = Bitmap.createBitmap(bp, 0, 0, bp.getWidth(), bp.getHeight(), matrix, true);
iv.setImageBitmap(scale_bp);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
}