我是android新手,写博客是为了做好学习笔记,以便以后能经常复习。另外,还想能过这个方式和大家交流学习,希望大家能够指正我的错误,帮助我提高能力,丰富知识。
缩放图像的方法有很多种,最简单的依法就是改变ImageView组件的大小。但应将<ImageView>标签的android:scaleType属性值设为fitCenter。旋转图像可以用android.graphics.Matris类的setRotate方法来实现,通过该方法可以指定旋转的任度数。
这里用了两个拖动条(SeekBar),第一个SeekBar用于缩放图像(android:max属性值为240),第2个SeekBar用于旋转图像(android:max属性值为360,也就是说,通过该SeekBar可以使图像最多旋转360度)。
布局文件代码如下:main.xmlActivity代码:csf.java<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <TextView android:layout_gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ImageView android:id="@+id/one" android:layout_width="150dp" android:layout_height="160dp" android:src="@drawable/b" android:scaleType="fitCenter" /> <TextView android:id="@+id/tv1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="图像宽度:149 图像高度:159" /> <SeekBar android:progress="120" android:id="@+id/s1" android:layout_height="wrap_content" android:max="240" android:layout_width="fill_parent" android:layout_marginTop="20dp"> </SeekBar> <TextView android:id="@+id/tv2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="0度" /> <SeekBar android:id="@+id/s2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:max="360" /> </LinearLayout>
package csf.imamgeview; 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; import android.widget.TextView; public class csf extends Activity implements OnSeekBarChangeListener{ private int m= 29,n=39;//图像的最小宽度和高度。 private ImageView one; private TextView tv1, tv2; private Matrix matrix = new Matrix(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); one=(ImageView)findViewById(R.id.one); tv1=(TextView)findViewById(R.id.tv1); tv2=(TextView)findViewById(R.id.tv2); SeekBar s1=(SeekBar)findViewById(R.id.s1); SeekBar s2=(SeekBar)findViewById(R.id.s2); s1.setOnSeekBarChangeListener(this); s2.setOnSeekBarChangeListener(this); //为了自适应屏幕的宽度,使图你放大到与屏幕宽度相等时为止,使用如下代码来获得屏幕的宽度,并将屏幕宽度与图像的最小宽度的差作为android:max属性 //的值 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); s1.setMax(dm.widthPixels - m); } @Override //在SeekBar类的onProgressChanged事件方法中需要控制图像的缩放和旋转 public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { //处理图像缩放 if(seekBar.getId()==R.id.s1) { int newwidth=progress+m;//计算处缩放后图像的新宽度 int newheigth=(int)progress*159/149+n;//计算处缩放后图像的新高度 //设置ImageView的大小 one.setLayoutParams(new LinearLayout.LayoutParams(newwidth,newheigth)); tv1.setText("图像宽度:"+newwidth+" 图像高度:"+newheigth); } //处理图像旋转 if(seekBar.getId()==R.id.s2) { //装载R.drawable.b图像文件,并返回Bitmap对像 Bitmap bitmap=((BitmapDrawable) getResources().getDrawable(R.drawable.b)).getBitmap(); //设置图像的旋转角度 matrix.setRotate(progress); //旋转图像,并生成新的Bitmap对像 bitmap=Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); //重新在ImageView组件中显示旋转后的图像 one.setImageBitmap(bitmap); tv2.setText(progress+"度"); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } }