亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android ImageView實現圖片裁剪和顯示功能

發布時間:2020-08-21 14:21:13 來源:腳本之家 閱讀:218 作者:shuang_bing 欄目:移動開發

首先在layout布局中設置按鈕和一個ImageView

<Button
  android:id="@+id/selectimagebtn"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="選擇圖片" />
 <Button
  android:id="@+id/cutimagebtn"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="選擇圖片進行裁剪" />
 <!-- 用于顯示圖片的信息 -->
 <ImageView
  android:id="@+id/imageview"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

在Activity上寫代碼

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 private Button selectImageBtn, cutImageBtn;
 private ImageView imageView;
 // 聲明兩個靜態的整型變量,主要用于意圖的返回的標志
 private static final int IMAGE_SELECT = 1;// 選擇圖片
 private static final int IMAGE_CUT = 2;// 裁剪圖片
  @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  selectImageBtn = (Button) findViewById(R.id.selectimagebtn);
  cutImageBtn = (Button) findViewById(R.id.cutimagebtn);
  imageView = (ImageView) findViewById(R.id.imageview);
  // 注冊監聽事件
  selectImageBtn.setOnClickListener(this);
  cutImageBtn.setOnClickListener(this);
  }

實現OnClickListener的方法,和設置裁剪圖片的方法

@Override
 public void onClick(View v) {
  switch (v.getId()) {
   case R.id.selectimagebtn:
    //如何提取手機的圖片庫,并且進行選擇圖片的功能
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//打開手機的圖片庫
    startActivityForResult(intent, IMAGE_SELECT);
    break;
   case R.id.cutimagebtn:
    Intent intent2 = getImageClipIntent();
    startActivityForResult(intent2, IMAGE_CUT);
  }
 }
private Intent getImageClipIntent() {
  Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);//不指定URL
  //實現對圖片的裁剪,必須要設置圖片的屬性和大小
  intent.setType("image/*");//獲取任意的圖片類型 Set an explicit MIME data type.每個MIME類型由兩部分組成,前面是數據的大類別,例如聲音audio、圖象image等,后面定義具體的種類。
  intent.putExtra("crop", "true");//滑動選中圖片區域
  intent.putExtra("aspectX", 1);//表示剪切框的比例1:1的效果
  intent.putExtra("aspectY", 1);
  intent.putExtra("outputX", 80);//指定輸出圖片的大小
  intent.putExtra("outputY", 80);
  intent.putExtra("return-data", true);//有返回值
  return intent;
 }

如果你想在Activity中得到新打開Activity關閉后返回的數據,你需要使用系統提供的startActivityForResult(Intent intent,int requestCode)方法打開新的Activity,新的Activity關閉后會向前面的Activity傳回數據,為了得到傳回的數據,你必須在前面的Activity中重寫onActivityResult(int requestCode, int resultCode,Intent data)方法

當新Activity關閉后,新Activity返回的數據通過Intent進行傳遞,Android平臺會調用前面Activity的onActivityResult()方法,把存放了返回數據的Intent作為第三個輸入參數傳入,在onActivityResult()方法中使用第三個輸入參數可以取出新Activity返回的數據。

需要返回數據或結果的,則使用startActivityForResult (Intent intent, intrequestCode),requestCode的值是自定義的,用于識別跳轉的目標Activity。

覆蓋onActivityResult方法

@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();//獲得圖片的路徑
    Display display = getWindowManager().getDefaultDisplay();
    Point point = new Point();
    display.getSize(point);
    int width = point.x;//獲得屏幕的寬度
    int height = point.y ;//屏幕高度
    try {
     //實現對圖片的裁剪的類,是一個匿名內部類
     BitmapFactory.Options options = new BitmapFactory.Options();
     options.inJustDecodeBounds = false;
     //對圖片的寬度和高度對應手機的屏幕進行匹配
     Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);
     //如果大于1表示圖片的高度大于手機屏幕的高度
     int hRatio = (int) Math.ceil(options.outHeight / (float) height);//(int)Math.ceil是下取整
     //如果大于1表示圖片的寬度大于手機屏幕的寬度
     int wRatio = (int) Math.ceil(options.outWidth / (float) width);
     //如果hRatio或wRatio大于1,則把圖片縮放到1/radio的尺寸和1/radio^2的像素
     if (hRatio > 1 || wRatio > 1) {
      if (hRatio > wRatio) {
       options.inSampleSize = hRatio;
      } else {
       options.inSampleSize = wRatio;
      }
      bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);
      imageView.setImageBitmap(bitmap);
     }else{
      //如果hRatio與wRatio為0,直接輸出
      imageView.setImageBitmap(bitmap);
     }
    } catch (Exception e) {
    }
    //表示裁剪圖片
   } else if (requestCode == IMAGE_CUT) {
    Bitmap bitmap = data.getParcelableExtra("data");
    imageView.setImageBitmap(bitmap);
   }
  }
 }
options.inJustDecodeBounds = false/true;

我們去解析一個圖片,如果太大,就會OOM,我們可以設置壓縮比例inSampleSize,但是這個壓縮比例設置多少就是個問題,所以我們解析圖片可以分為倆個步驟,第一步就是獲取圖片的寬高,這里要設置Options.inJustDecodeBounds=true,這時候decode的bitmap為null,只是把圖片的寬高放在Options里。

然后第二步就是設置合適的壓縮比例inSampleSize,inSampleSize為原來的1/ratio,這時候獲得合適的Bitmap。

再設置options.inJustDecodeBounds = false;重新讀出圖片bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);

以上所述是小編給大家介紹的Android ImageView實現圖片裁剪和顯示功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青铜峡市| 苏州市| 江津市| 普陀区| 兖州市| 敖汉旗| 石狮市| 福州市| 珠海市| 醴陵市| 烟台市| 介休市| 体育| 原阳县| 武宁县| 衡水市| 军事| 花垣县| 阿拉善左旗| 东辽县| 玉树县| 岱山县| 阿图什市| 宜都市| 昂仁县| 荆门市| 梁平县| 手机| 晋城| 绥滨县| 静安区| 连江县| 舞阳县| 高安市| 洛阳市| 蕉岭县| 龙口市| 霸州市| 苗栗市| 小金县| 诸城市|