欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)圖片上傳功能

 更新時間:2017年02月07日 14:23:49   作者:wangwo1991  
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)圖片上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近在開發(fā)中,涉及到用戶的意見反饋功能這一方面的開發(fā),需要用戶輸入的文字或者提交的圖片,效果大概類似于微信朋友圈那樣的圖片選擇器,一開始自己找了個用universal-image-loader框架寫的,很容實現(xiàn),但是容易出現(xiàn)內(nèi)存溢出,并且不好解決,是在沒辦法,就自己看了一些資料,準(zhǔn)備自己寫;在這里說下本人實現(xiàn)的思路,進(jìn)入頁面也就是顯示選擇圖片的頁面用GridView來實現(xiàn),點擊添加圖標(biāo)的時候,用Dialog實現(xiàn),給Dialog添加相應(yīng)的動畫就可以了,進(jìn)入圖片展示頁面還是用GridView來實現(xiàn),點擊所有圖片時用的是Dialog和listview來實現(xiàn)的,以下是相應(yīng)的代碼實現(xiàn):

private void showDialog() {
  View view = getLayoutInflater().inflate(R.layout.user_header_dialog, null);
  final Dialog dialog = new Dialog(this, R.style.transparentFrameWindowStyle);
  dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  Window window = dialog.getWindow();
  // 設(shè)置顯示動畫
  window.setWindowAnimations(R.style.main_menu_animstyle);
  WindowManager.LayoutParams wl = window.getAttributes();
  wl.x = 0;
  wl.y = getWindowManager().getDefaultDisplay().getHeight();
  // 以下這兩句是為了保證按鈕可以水平滿屏
  wl.width = ViewGroup.LayoutParams.MATCH_PARENT;
  wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;

  // 設(shè)置顯示位置
  dialog.onWindowAttributesChanged(wl);
  // 設(shè)置點擊外圍解散
  dialog.setCanceledOnTouchOutside(true);
  dialog.show();

  btn_picture = (Button) window.findViewById(R.id.btn_picture);
  btn_photo = (Button) window.findViewById(R.id.btn_photo);
  btn_cancle = (Button) window.findViewById(R.id.btn_cancle);

  btn_picture.setOnClickListener(new View.OnClickListener() {// 圖庫
     @SuppressLint("InlinedApi")
     @Override
     public void onClick(View v) {
      Intent intent = new Intent(PhotoSelectActivity.this, AlbumActivity.class);
      startActivity(intent);
      dialog.dismiss();
     }
    });
  btn_photo.setOnClickListener(new View.OnClickListener() {// 相機
     @SuppressLint("InlinedApi")
     @Override
     public void onClick(View v) {
      photo();
      dialog.dismiss();
     }
    });
  btn_cancle.setOnClickListener(new View.OnClickListener() {// 取消
     @Override
     public void onClick(View v) {
      dialog.dismiss();
     }
    });
 }

這是彈框部分的代碼,在這里需要注意的就是android6.0系統(tǒng)調(diào)用的時候特別是相機和訪問sd權(quán)限的問題,跟android6.0以下的系統(tǒng)是不一樣的,android6.0以下的系統(tǒng)在AndroidManifest.xml文件中配置就可以了,android6.0及6.0以上的話不僅需要再AndroidManifest.xml中聲明還需要動態(tài)申請權(quán)限,如未申請權(quán)限就會造成程序的閃退,這里的話沒有對android6.0及6.0以上做適配,關(guān)于android6.0及6.0以上系統(tǒng)權(quán)限的話,會在之后博文中提到;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  switch (requestCode) {
  case TAKE_PICTURE:
   if (Bimp.tempSelectBitmap.size() < 9 && resultCode == RESULT_OK) {
    File file = new File(Environment.getExternalStorageDirectory() + "/" + mImageFileName);
    mImagePath = file.getPath();
    Bitmap bitmapFromUrl = FileUtils.getBitmapFromUrl(mImagePath, 320, 480);
    String[] split = mImagePath.split("0/");
    String strUrl = "";
    if (split != null && split.length > 0) {
     strUrl = split[1];
    }
    // 重新緩存圖片
    FileUtils.setPicToView(PhotoSelectActivity.this,bitmapFromUrl, strUrl);
    // 獲取重新緩存圖片的大小
    File iconDir = FileUtils.getIconDir(PhotoSelectActivity.this);
    String absolutePath = iconDir.getAbsolutePath();
    String picPath = absolutePath + strUrl;

    ImageItem takePhoto = new ImageItem();
    takePhoto.setBitmap(bitmapFromUrl);
    takePhoto.setImagePath(picPath);
    Bimp.tempSelectBitmap.add(takePhoto);
   }
   break;
  }
 }

這里是調(diào)用相機拍照返回時調(diào)用這里,獲取到圖片同時對圖片進(jìn)行壓縮處理,同時緩存在sd中,并獲取相應(yīng)的路徑;

/**
  * 清空圖片集合
  */
 private void cleanImageList() {
  Bimp.max = 0;
  Bimp.tempSelectBitmap.clear();
 }

在點擊返回或者物理物理返回鍵的的時候要對定義的靜態(tài)變量賦值為0,同時清空圖片保存時定義的靜態(tài)list集合;

private void initPow() {
  View view = getLayoutInflater().inflate(R.layout.listview_popupwindows, null);

  final Dialog dialog = new Dialog(this, R.style.Dialog_Fullscreen);
  dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  Window window = dialog.getWindow();
  // 設(shè)置顯示動畫
  window.setWindowAnimations(R.style.main_menu_animstyle);
  WindowManager.LayoutParams wl = window.getAttributes();
  wl.x = 0;
  wl.y = getWindowManager().getDefaultDisplay().getHeight();

  int height = 0;
  int h=(int) (mScreenHeight / 1.6);
  int listH=AlbumActivity.contentList.size()*DensityUtil.dip2px(AlbumActivity.this,80);
  if (listH==0) {
   height=h;
  }else{
   if (listH>h) {
    height=h;
   }else{
    height=listH;
   }
  }

  // 以下這兩句是為了保證按鈕可以水平滿屏
  wl.width = ViewGroup.LayoutParams.MATCH_PARENT;
  wl.height = height;
  // 設(shè)置顯示位置
  dialog.onWindowAttributesChanged(wl);
  // 設(shè)置點擊外圍解散
  dialog.setCanceledOnTouchOutside(true);
  dialog.show();

  ListView listview = (ListView) window.findViewById(R.id.listview);
  ListAdapter listAdapter = new ListAdapter(AlbumActivity.this);
  listview.setAdapter(listAdapter);

  listview.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    dataList = (ArrayList<ImageItem>) AlbumActivity.contentList.get(arg2).imageList;
    String folderName = AlbumActivity.contentList.get(arg2).bucketName;
    tv_all.setText("" + folderName);
    gridImageAdapter = new AlbumGridViewAdapter(AlbumActivity.this, dataList, Bimp.tempSelectBitmap);
    agridView.setAdapter(gridImageAdapter);
    dialog.dismiss();
   }
  });

 }

這里的話是在圖片選擇展示頁面,點擊所有圖片時的彈框,用的是一個Dialog和listview來實現(xiàn)的,在這里要注意的是就是listview展示的高度問題,這里所限獲取到所有l(wèi)istview條目高度和,同時獲取到屏幕的高度,如果listview條目高度和大于屏幕高度/1.6時,就采用屏幕高度/1.6,如果listview條目高度和小于屏幕高度/1.6時,就采用listview條目高度;這樣就差不多實現(xiàn)了,下面是運行效果:

源碼:Androidphoto

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android仿微信菜單(Menu)(使用C#和Java分別實現(xiàn))

    Android仿微信菜單(Menu)(使用C#和Java分別實現(xiàn))

    這篇文章主要介紹了Android仿微信菜單(Menu)(使用C#和Java分別實現(xiàn)),本文分別給出C#和Java版的運行效果及實現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • android實現(xiàn)手機與單片機藍(lán)牙模塊通信

    android實現(xiàn)手機與單片機藍(lán)牙模塊通信

    這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)手機與單片機藍(lán)牙模塊通信的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android獲取app應(yīng)用程序大小的方法

    Android獲取app應(yīng)用程序大小的方法

    本文通過一段代碼給大家介紹android獲取app應(yīng)用程序大小的方法,由于android對這種方法進(jìn)行了封裝,我們沒有權(quán)限去調(diào)用這個方法,只能通過aidl,然后用java的反射機制去調(diào)用系統(tǒng)級方法,感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • Kotlin WorkManager使用方法詳解

    Kotlin WorkManager使用方法詳解

    這篇文章主要介紹了Kotlin WorkManager使用方法,WorkManager是 安卓體系結(jié)構(gòu)之一,也是Android JetPack的一部分。WorkManager用于可延期并需要保證執(zhí)行的后臺工作
    2023-01-01
  • Android自定義View實現(xiàn)抽獎轉(zhuǎn)盤

    Android自定義View實現(xiàn)抽獎轉(zhuǎn)盤

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實現(xiàn)抽獎轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • android 網(wǎng)絡(luò)連接處理分析

    android 網(wǎng)絡(luò)連接處理分析

    在Android中,可以有多種方式來實現(xiàn)網(wǎng)絡(luò)編程,本文將詳細(xì)介紹android 網(wǎng)絡(luò)連接處理,需要了解的朋友可以參考下
    2012-11-11
  • Android使用Photoview實現(xiàn)圖片左右滑動及縮放功能

    Android使用Photoview實現(xiàn)圖片左右滑動及縮放功能

    這篇文章主要為大家詳細(xì)介紹了Android使用Photoview實現(xiàn)圖片左右滑動及縮放功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Flutter滾動組件之ListView使用方法詳解

    Flutter滾動組件之ListView使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Flutter滾動組件之ListView的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法

    studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法

    這篇文章主要介紹了studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Android開發(fā)實現(xiàn)帶清空按鈕的EditText示例

    Android開發(fā)實現(xiàn)帶清空按鈕的EditText示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)帶清空按鈕的EditText,結(jié)合具體實例形式分析了Android實現(xiàn)EditText清空按鈕功能相關(guān)操作技巧,非常具有實用價值,需要的朋友可以參考下
    2017-11-11

最新評論