动态放大缩小ImageView里的图片(运用Matrix对象来缩放图片文件)
新建一个继承Activity类的ImageViewMatrixActivity,并设置布局文件为:imageviewmatrix.xml。
首先在布局文件中添加2个按钮Big和Small、ImageView。
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" >
<Button android:id="@+id/imageviewmatrix_btn01" style="@android:style/Widget.Button.Inset" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/big" />
<Button android:id="@+id/imageviewmatrix_btn02" style="@android:style/Widget.Button.Inset" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/small" /> </LinearLayout>
<ImageView android:id="@+id/imageviewmatrix_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/image1" />
|
而后在Activity代码中修改。
package lyx.feng.second;
import lyx.feng.simpletextdemo.R; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView;
public class ImageViewMatrixActivity extends Activity implements OnClickListener { private Button big = null; private Button small = null; private ImageView image = null; private Bitmap bitmap = null; private DisplayMetrics dm = null; private int heightScreen = 0; private int widthScreen = 0; private double size = 1.0f;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.imageviewmatrix); this.big = (Button) super.findViewById(R.id.imageviewmatrix_btn01); this.small = (Button) super.findViewById(R.id.imageviewmatrix_btn02); this.image = (ImageView) super.findViewById(R.id.imageviewmatrix_image);
// 获取屏幕的宽和高 this.dm = new DisplayMetrics(); super.getWindowManager().getDefaultDisplay().getMetrics(this.dm); this.heightScreen = dm.heightPixels; this.widthScreen = dm.widthPixels; this.bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
// 注册单击按钮 this.big.setOnClickListener(this); this.small.setOnClickListener(this); }
@Override public void onClick(View v) { switch (v.getId()) { case R.id.imageviewmatrix_btn01: // 放大操作 big(); break; case R.id.imageviewmatrix_btn02: // 缩小操作 small(); break; } }
private void small() { // 缩小操作 int bitmapHeight = bitmap.getHeight(); int bitmapWidth = bitmap.getWidth(); size -= 0.1f; // 取得缩小后的图片大小 bitmapHeight = (int) (bitmapHeight * size); bitmapWidth = (int) (bitmapWidth * size); Matrix matrix = new Matrix(); matrix.postScale((float) size, (float) size); // 得到缩小后的图片 Bitmap temp = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true); this.image.setImageBitmap(temp); // 回收Bitmap temp = null; // 如果缩小比率为0.1则按钮不可点击 if (size <= 0.1) { this.small.setEnabled(false); } // 放大按钮可以点击 this.big.setEnabled(true); }
private void big() { // 放大操作 int bitmapHeight = bitmap.getHeight(); int bitmapWidth = bitmap.getWidth(); size += 0.1f; // 取得缩小后的图片大小 bitmapHeight = (int) (bitmapHeight * size); bitmapWidth = (int) (bitmapWidth * size); Matrix matrix = new Matrix(); matrix.postScale((float) size, (float) size); // 得到缩小后的图片 Bitmap temp = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true); this.image.setImageBitmap(temp); // 回收Bitmap temp = null; // 如果缩小比率为屏幕的2倍则按钮不可点击 if (size >= this.heightScreen * 2 || size >= this.widthScreen * 2) { this.big.setEnabled(true); } // 缩小按钮可以点击 this.small.setEnabled(false); }
}
|