大图的加载

手机客户端加载图片99%不会直接加载,而是需要放缩。比较宽和高的缩放比例,哪个大会用哪个进行缩放。
Example : 比如加载手机根目录的一张图片
首先获取权限

permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

使用RxJava动态获取权限时,首先需要在module gradle文件下面引入下面两个组件:

implementation 'io.reactivex:rxjava:1.1.6'    //引入RxJava
implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'   //RxPermission

布局文件只有一个imageView组件,因此省略,Java代码如下,主要是scaleLoad函数。

public class MainActivity extends AppCompatActivity {

private ImageView imageView;
private String name = "example.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView = findViewById(R.id.imageView);
    loadImage();
}

private void loadImage() {
    RxPermissions.getInstance(this)                     //Android 6.0 系统动态获取权限
    .request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
    .subscribe(new Action1<Boolean>() {
        @Override
        public void call(Boolean aBoolean) {
            if (aBoolean){
                scaleLoad();
            }
        }
    });
}

private void scaleLoad(){
    Log.i("path","path = " + Environment.getExternalStorageDirectory());
    File file = new File(Environment.getExternalStorageDirectory(),name);
    if (!file.exists()) return;
    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inJustDecodeBounds = true;    //设置为true,代表加载器不加载图片,只把图片的宽和高读取出来
    BitmapFactory.decodeFile(file.getAbsolutePath(),opts);
    int imageWidth = opts.outWidth;
    int imageHeight = opts.outHeight;
    Log.i("bitmap","imageWidth =" + imageWidth);
    Log.i("bitmap","imageHeight = "+imageHeight);
    //得到屏幕的宽和高
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);
    int screenWidth = displayMetrics.widthPixels;
    int screenHeight = displayMetrics.heightPixels;
    Log.i("screen","screenWidth = "+screenWidth);
    Log.i("screen","screenHeight = "+screenHeight);
   //计算缩放比例
    int widthScale = imageWidth/screenWidth;
    int heightScale = imageHeight/screenHeight;
    int scale = widthScale > heightScale ? widthScale : heightScale;
    Log.i("scale","scale = "+scale);
    //设置为false,加载器就会加载图片了
    opts.inJustDecodeBounds = false;
    //使用缩放比例进行缩放加载图片
    opts.inSampleSize = scale;
    Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath(),opts);
    imageView.setImageBitmap(bm);     //显示在iamgeView上
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值