Android 加载大图片

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "jojo";

    private ImageView iv;
    private int height;
    private int width;

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //用来显示小狗的图片
        iv = (ImageView) findViewById(R.id.iv);
        //1 获取手机的分辨率 windowmanager
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        height = wm.getDefaultDisplay().getHeight();
        width = wm.getDefaultDisplay().getWidth();
        Log.d(TAG, "onCreate: width:" + width + "height:" + height);
    }

    // 点击按钮 加载一张大图片
    @SuppressLint("SdCardPath") // 告诉编译器忽略SdCardPath警告
    public void click(View v) {
        // 创建一个位图工厂的配置参数
        BitmapFactory.Options options = new BitmapFactory.Options();
        // 解码器不去真正的解析位图 但是还能够获取图片的宽和高信息 Bounds 边界  graphics图像
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/dog.jpg", options);
        //2 获取图片的宽和高信息
        int imgWidth = options.outWidth;
        int imgHeight = options.outHeight;
        Log.d(TAG, "click: 图片的宽和高:" + imgWidth + "-----" + imgHeight);
        //3 计算缩放缩放比,由于是int类型,不管一点几倍都是整数1                 scale 比例
        int scale = 1;
        int scaleX = imgWidth/width;
        int scaleY = imgHeight/height;
        if (scaleX >= scaleY && scaleX > scale) {
            scale = scaleX;
        }
        if (scaleY > scaleX && scaleY > scale) {
            scale = scaleY;
        }
        Log.d(TAG, "click: 缩放比:" + scale);
        //4 安装缩放比进行显示 生物学 丁磊?
        options.inSampleSize = scale;
        //5 安装缩放比 进行解析位图
        options.inJustDecodeBounds =false;
        Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/dog.jpg", options);
        //6 把bitmap显示iv上
        iv.setImageBitmap(bitmap);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值