当前位置:操作系统 > 安卓/Android >>

Android之UI学习篇:ImageView实现适屏和裁剪图片的功能

ImageView实现图片适应屏幕大小显示,和图片裁剪的功能.
实现的效果
主界面:
 
适应屏幕:
 
裁剪图片:
 
显示裁剪图片到ImagView:
 
源代码:
MainActivity.java
[html]  www.zzzyk.com
package com.imageview.activity;  
  
import java.io.FileNotFoundException;  
import android.app.Activity;  
import android.content.Intent;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.net.Uri;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.ImageView;  
import android.widget.Toast;  
  
public class MainActivity extends Activity implements OnClickListener {  
    private Button imageSelectBtn;  
    private Button imageCutBtn;  
    private ImageView imageView;  
    // 声明两个静态整型变量,用于意图的返回标志  
    private static final int IMAGE_SELECT = 1; // 选择图片  
    private static final int IMAGE_CUT = 2; // 裁剪图片  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        setupViews();  
    }  
  
    // 我的一贯作风呵呵  
    public void setupViews() {  
        imageSelectBtn = (Button) findViewById(R.id.imageSelectButton);  
        imageSelectBtn.setOnClickListener(this);  
        imageCutBtn = (Button) findViewById(R.id.imageCutButton);  
        imageCutBtn.setOnClickListener(this);  
        imageView = (ImageView) findViewById(R.id.imageView);  
    }  
  
    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        super.onActivityResult(requestCode, resultCode, data);  
        if (resultCode == RESULT_OK) {  
            // 处理图片按照手机屏幕大小显示  
            if (requestCode == IMAGE_SELECT) {  
                // 获得图片的路径  
                Uri uri = data.getData();   
                // 获得屏幕宽度  
                int dw = getWindowManager().getDefaultDisplay().getWidth();   
                // 获得屏幕宽度  
                int dh = getWindowManager().getDefaultDisplay().getHeight() / 2;   
                try {  
                    // 实现对图片裁剪的类,是一个匿名内部类  
                    BitmapFactory.Options factory = new BitmapFactory.Options();  
                    // 如果设置为true,允许查询图片不是按照像素分配内存  
                    factory.inJustDecodeBounds = true;  
                    Bitmap bmp = BitmapFactory.decodeStream(  
                            getContentResolver().openInputStream(uri), null,  
                            factory);  
                    // 对图片的高度和宽度对应手机屏幕进行匹配  
                    // 宽度之比  
                    int wRatio = (int) Math.ceil(factory.outWidth / (float) dw);   
                    // 高度之比  
                    int hRatio = (int) Math.ceil(factory.outHeight / (float) dh);   
                    // 如果wRatio大于1,表示图片的宽度大于屏幕宽度,类似hRatio  
                    if (wRatio > 1 || hRatio > 1) {  
                        // inSampleSize>1则返回比原图更小的图片  
                        if (hRatio > wRatio) {  
                            factory.inSampleSize = hRatio;  
                        } else {  
                            factory.inSampleSize = wRatio;  
                        }  
                    }  
                    // 该属性为false则允许调用者查询图片无需为像素分配内存  
                    factory.inJustDecodeBounds = false;  
                    // 再次使用BitmapFactory对象图像进行适屏操作  
                    bmp = BitmapFactory.decodeStream(getContentResolver()  
                            .openInputStream(uri), null, factory);  
                    imageView.setImageBitmap(bmp);  
                } catch (FileNotFoundException e) {  
                    e.printStackTrace();  
    &nbs
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,