Android开发中有时会用到图片缩放效果,即点击图片时显示缩放按钮,过一会消失。本文就根据新浪微博的图片缩放给大家写一个实例,以供参考。下面直接上代码。
Java代码
- package com.Johnson.image.zoom;
- import android.app.Activity;
- import android.app.Dialog;
- import android.app.ProgressDialog;
- import android.content.DialogInterface;
- import android.content.DialogInterface.OnKeyListener;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Matrix;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.DisplayMetrics;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.RelativeLayout;
- import android.widget.ZoomControls;
-
- public class MainActivity extends Activity {
-
- private final int LOADING_IMAGE = 1;
- public static String KEY_IMAGEURI = "ImageUri";
- private ZoomControls zoom;
- private ImageView mImageView;
- private LinearLayout layoutImage;
- private int displayWidth;
- private int displayHeight;
-
- private Bitmap bmp;
-
- private float scaleWidth = 1;
-
- private float scaleHeight = 1;
-
- private int zoomNumber=0;
-
- private int showTime=3000;
- RelativeLayout rl;
- Handler mHandler = new Handler();
- private Runnable task = new Runnable() {
- public void run() {
-
- zoom.setVisibility(View.INVISIBLE);
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
-
- bmp=BitmapFactory.decodeResource(getResources(), R.drawable.image);
-
- initZoom();
- }
- @Override
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case LOADING_IMAGE: {
- final ProgressDialog dialog = new ProgressDialog(this);
- dialog.setOnKeyListener(new OnKeyListener() {
- @Override
- public boolean onKey(DialogInterface dialog, int keyCode,
- KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- finish();
- }
- return false;
- }
- });
- dialog.setMessage("正在加载图片请稍后...");
- dialog.setIndeterminate(true);
- dialog.setCancelable(true);
- return dialog;
- }
- }
- return null;
- }
- public void initZoom() {
-
-
- DisplayMetrics dm = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- displayWidth = dm.widthPixels;
- displayHeight = dm.heightPixels;
- mImageView = (ImageView) findViewById(R.id.myImageView);
- mImageView.setImageBitmap(bmp);
- layoutImage = (LinearLayout) findViewById(R.id.layoutImage);
- mImageView.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
-
-
-
-
- zoom.setVisibility(View.VISIBLE);
- mHandler.removeCallbacks(task);
- mHandler.postDelayed(task, showTime);
- }
- });
- layoutImage.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
-
- zoom.setVisibility(View.VISIBLE);
- mHandler.removeCallbacks(task);
- mHandler.postDelayed(task, showTime);
- }
- });
-
- zoom = (ZoomControls) findViewById(R.id.zoomcontrol);
- zoom.setIsZoomInEnabled(true);
- zoom.setIsZoomOutEnabled(true);
-
- zoom.setOnZoomInClickListener(new OnClickListener() {
- public void onClick(View v) {
- big();
- }
- });
-
- zoom.setOnZoomOutClickListener(new OnClickListener() {
-
- public void onClick(View v) {
- small();
- }
-
- });
- zoom.setVisibility(View.VISIBLE);
- mHandler.postDelayed(task, showTime);
-
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
-
-
-
-
-
- zoom.setVisibility(View.VISIBLE);
- mHandler.removeCallbacks(task);
- mHandler.postDelayed(task, showTime);
- return false;
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
-
- super.onKeyDown(keyCode, event);
-
- return true;
- }
-
-
- private void small() {
- --zoomNumber;
- int bmpWidth = bmp.getWidth();
- int bmpHeight = bmp.getHeight();
-
- Log.i("","bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
-
-
- double scale = 0.8;
-
- scaleWidth = (float) (scaleWidth * scale);
- scaleHeight = (float) (scaleHeight * scale);
-
- Matrix matrix = new Matrix();
- matrix.postScale(scaleWidth, scaleHeight);
- Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,
- matrix, true);
- mImageView.setImageBitmap(resizeBmp);
-
-
- if ((scaleWidth * scale * bmpWidth < bmpWidth / 4
- || scaleHeight * scale * bmpHeight > bmpWidth /4
- || scaleWidth * scale * bmpWidth > displayWidth / 5
- || scaleHeight * scale * bmpHeight > displayHeight / 5)&&(zoomNumber==-1) ){
-
- zoom.setIsZoomOutEnabled(false);
-
- } else {
-
- zoom.setIsZoomOutEnabled(true);
-
- }
-
- zoom.setIsZoomInEnabled(true);
- System.gc();
- }
-
-
- private void big() {
- ++zoomNumber;
- int bmpWidth = bmp.getWidth();
- int bmpHeight = bmp.getHeight();
-
-
- double scale = 1.25;
-
- scaleWidth = (float) (scaleWidth * scale);
- scaleHeight = (float) (scaleHeight * scale);
-
- Matrix matrix = new Matrix();
- matrix.postScale(scaleWidth, scaleHeight);
- Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,
- matrix, true);
- mImageView.setImageBitmap(resizeBmp);
-
- if (scaleWidth * scale * bmpWidth > bmpWidth * 4
- || scaleHeight * scale * bmpHeight > bmpWidth * 4
- || scaleWidth * scale * bmpWidth > displayWidth * 5
- || scaleHeight * scale * bmpHeight > displayHeight * 5) {
-
- zoom.setIsZoomInEnabled(false);
-
- } else {
-
- zoom.setIsZoomInEnabled(true);
-
- }
-
- zoom.setIsZoomOutEnabled(true);
-
- System.gc();
- }
-
- }
布局文件如下:
XML/HTML代码
- <?xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/layout1"
- >
-
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/rl"
- >
-
- <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="19"
- android:scrollbars="none"
- android:fadingEdge="vertical"
- android:layout_gravity="center"
- android:gravity="center"
- >
-
- <HorizontalScrollView
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:scrollbars="none"
- android:layout_gravity="center"
- android:gravity="center"
- android:id="@+id/hs"
-
- >
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/layoutImage"
- android:layout_gravity="center"
- android:gravity="center"
- >
- <ImageView
- android:layout_gravity="center"
- android:gravity="center"
- android:id="@+id/myImageView"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="19"
- android:paddingTop="5dip"
- android:paddingBottom="5dip"
-
- />
- </LinearLayout>
- </HorizontalScrollView >
- </ScrollView>
-
- <ZoomControls android:id="@+id/zoomcontrol"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_alignParentBottom="true"
- >
- </ZoomControls>
- </RelativeLayout>
-
- </FrameLayout>