1. 程式人生 > >側滑裡簡單的切換頭像方法-也就是二級取樣了

側滑裡簡單的切換頭像方法-也就是二級取樣了

//001
首先先獲取到 imagerView 的ID 其次開啟相簿的管理 使用startActivityForResult

imageView = findViewById(R.id.hand);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent,YIBAI);
            }
        });

//002
重寫一個onActivityResult 一進去就開始判斷 你的兩個 int值

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(requestCode==YIBAI&&resultCode==RESULT_OK){
            Uri uri = data.getData();
            //方法2                  方法1
            progressImage(url2Path(uri));
            return;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

方法裡呼叫了兩個方法,首先第一個方法的目的在於操作圖片
//方法1 :定義一個數組 接收方法裡的Data 引數

//操作圖片 002
    private String url2Path(Uri uri){
        //定義陣列
        String[] proj ={MediaStore.Images.Media.DATA};
        //採用Cursorloader
        CursorLoader loader = new CursorLoader(this, uri, proj, null, null, null);
        //得到後臺載入
        Cursor cursor = loader.loadInBackground();
        int columnIndexOrThrow = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(columnIndexOrThrow);

    }

//方法2:
當你對圖片一頓操作之後 就要開始賦值了
這裡的 size 是我自定義的 東西 在 Valus 定義出來的dimen.xml 檔案

 //001
    private void progressImage(String imagrPath){

        //得到一個大小 size
        int size = getResources().getDimensionPixelSize(R.dimen.IConSize);

        Bitmap bitmap = IconUtil.scaleBitmap(imagrPath, size, size);

        imageView.setImageBitmap(bitmap);
    }

//用來對圖片進行取樣的工具類

public class IconUtil {
    //二次取樣
    public static Bitmap scaleBitmap(String imagePath, int width, int height){
        //先得到 BitmapFactory.options
        BitmapFactory.Options options = new BitmapFactory.Options();

        //02讓他只加載邊框--說白的就是載入圖片的所有資訊 就是不載入圖片
        options.inJustDecodeBounds=true;

        //03 把資訊和圖片給這個工廠
        BitmapFactory.decodeFile(imagePath,options);

        //04 我需要 規定一下寬高 所以需要傳參寬高過來
        //就是--- 改變好寬高的一個架子
        options.inSampleSize=Math.max(options.outWidth/width,options.outHeight/height);

        //05加載出來這個圖片
        options.inJustDecodeBounds = false;

        //06 把圖片的路徑imagpath 用工廠factory給它 加上之前定義的那個規則options
        return BitmapFactory.decodeFile(imagePath,options);

    }