使用Matrix放大或缩小图片

本文介绍了一个简单的Android应用程序,该程序允许用户通过按钮点击操作来放大和缩小图片。使用Bitmap和Matrix类实现图片的动态调整,并根据屏幕尺寸进行适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.将图片ex04_22_1.png放在目录res/drawable-hdpi下

2.布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
    android:id="@+id/layout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
      android:id="@+id/myImageView"
      android:layout_width="200dp"
      android:layout_height="150dp"
      android:src="@drawable/ex04_22_1"
      android:contentDescription="@string/des" 
    >
    </ImageView>
    <Button
      android:id="@+id/myButton1"
      android:layout_width="90dp"
      android:layout_height="60dp"
      android:text="@string/small"
      android:textSize="18sp"
      android:layout_x="200dp"
       android:layout_y="372dp"
    >
    </Button>
    <Button
      android:id="@+id/myButton2"
      android:layout_width="90dp"
      android:layout_height="60dp"
      android:text="@string/big"
      android:textSize="18sp"
      android:layout_x="90dp"
      android:layout_y="372dp"
    >
    </Button>
  </AbsoluteLayout>

3.创建一个ex04_22.java的文件

package wei.cao.test;

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.AbsoluteLayout;
import android.widget.Button;
import android.widget.ImageView;

public class ex04_22 extends Activity{
	   
	 private ImageView mImageView;
	 private Button btn1,btn2;
	 private AbsoluteLayout layout1;
	 private Bitmap bmp;
	 private int id=0;
	 private int displayWidth,displayHeight;
	 private float scaleWidth=1,scaleHeight=1;
	// private final static String filename="/data/data/ex04_22.lcs/ex04_22_2.png";
	    @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.main);
	        //取得屏幕分辨率
	        DisplayMetrics dm=new DisplayMetrics();
	        getWindowManager().getDefaultDisplay().getMetrics(dm);
	        displayWidth=dm.widthPixels;
	        displayHeight=dm.heightPixels-80;
	       
	        bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
	        
	        layout1=(AbsoluteLayout)findViewById(R.id.layout1);
	        mImageView=(ImageView)findViewById(R.id.myImageView);
	        btn1=(Button)findViewById(R.id.myButton1);
	        btn2=(Button)findViewById(R.id.myButton2);
	        
	        btn1.setOnClickListener(new OnClickListener(){
	         public void onClick(View v){
	          small();
	         }
	        });
	  
	        btn2.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				big();
			}
	        });
	    }
	    private void small(){
	     //获得Bitmap的高和宽
	     int bmpWidth=bmp.getWidth();
	     int bmpHeight=bmp.getHeight();
	     //设置缩小比例
	     double scale=0.8;
	     //计算出这次要缩小的比例
	     scaleWidth=(float)(scaleWidth*scale);
	     scaleHeight=(float)(scaleHeight*scale);
	     //产生resize后的Bitmap对象
	     Matrix matrix=new Matrix();
	     matrix.postScale(scaleWidth, scaleHeight);
	     Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
	     if(id==0){
	      layout1.removeView(mImageView);
	     }
	     else{
	      layout1.removeView((ImageView)findViewById(id));
	     }
	     id++;
	     ImageView imageView=new ImageView(this);
	     imageView.setId(id);
	     imageView.setImageBitmap(resizeBmp);
	     layout1.addView(imageView);
	     setContentView(layout1);
	     btn2.setEnabled(true);
	    }
	    private void big(){
	     //获得Bitmap的高和宽
	     int bmpWidth=bmp.getWidth();
	     int bmpHeight=bmp.getHeight();
	     //设置缩小比例
	     double scale=1.25;
	     //计算出这次要缩小的比例
	     scaleWidth=(float)(scaleWidth*scale);
	     scaleHeight=(float)(scaleHeight*scale);
	     //产生resize后的Bitmap对象
	     Matrix matrix=new Matrix();
	     matrix.postScale(scaleWidth, scaleHeight);
	     Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
	     if(id==0){
	      layout1.removeView(mImageView);
	     }
	     else{
	      layout1.removeView((ImageView)findViewById(id));
	     }
	     id++;
	     ImageView imageView=new ImageView(this);
	     imageView.setId(id);
	     imageView.setImageBitmap(resizeBmp);
	     layout1.addView(imageView);
	     setContentView(layout1);
	     if(scaleWidth*scale*bmpWidth>displayWidth||scaleHeight*scale*scaleHeight>displayHeight){
	      btn2.setEnabled(false);
	     }
	    }
	}

4.运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值