最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

  // 設置顯示位置
  dialog.onWindowAttributesChanged(wl);
  // 設置點擊外圍解散
  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)調用的時候特別是相機和訪問sd權限的問題,跟android6.0以下的系統(tǒng)是不一樣的,android6.0以下的系統(tǒng)在AndroidManifest.xml文件中配置就可以了,android6.0及6.0以上的話不僅需要再AndroidManifest.xml中聲明還需要動態(tài)申請權限,如未申請權限就會造成程序的閃退,這里的話沒有對android6.0及6.0以上做適配,關于android6.0及6.0以上系統(tǒng)權限的話,會在之后博文中提到;

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;
  }
 }

這里是調用相機拍照返回時調用這里,獲取到圖片同時對圖片進行壓縮處理,同時緩存在sd中,并獲取相應的路徑;

/**
  * 清空圖片集合
  */
 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();
  // 設置顯示動畫
  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;
  // 設置顯示位置
  dialog.onWindowAttributesChanged(wl);
  // 設置點擊外圍解散
  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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android 虛擬按鍵與沉浸式的適配方法

    Android 虛擬按鍵與沉浸式的適配方法

    今天小編就為大家分享一篇Android 虛擬按鍵與沉浸式的適配方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Android消息處理機制Looper和Handler詳解

    Android消息處理機制Looper和Handler詳解

    Android應用程序是通過消息來驅動的,系統(tǒng)為每一個應用程序維護一個消息隊例,應用程序的主線程不斷地從這個消息隊例中獲取消息(Looper),然后對這些消息進行處理(Handler),這樣就實現(xiàn)了通過消息來驅動應用程序的執(zhí)行,本文將詳細分析Android應用程序的消息處理機制
    2014-09-09
  • Android仿微信布局的實現(xiàn)示例

    Android仿微信布局的實現(xiàn)示例

    本文主要介紹了Android仿微信布局的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • Android優(yōu)化提升應用啟動速度及Splash頁面的設計

    Android優(yōu)化提升應用啟動速度及Splash頁面的設計

    這篇文章主要介紹了Android性能優(yōu)化的一些相關資料,文章圍繞提升應用啟動速度及Splash頁面的設計的內容展開介紹,需要的朋友可以參考一下,希望對你有所幫助
    2021-12-12
  • Android實現(xiàn)保持屏幕常亮功能

    Android實現(xiàn)保持屏幕常亮功能

    本篇文章主要介紹了Android實現(xiàn)保持屏幕常亮功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Flutter 實現(xiàn)酷炫的3D效果示例代碼

    Flutter 實現(xiàn)酷炫的3D效果示例代碼

    這篇文章主要介紹了Flutter 實現(xiàn)酷炫的3D效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Android實現(xiàn)一個帶粘連效果的LoadingBar

    Android實現(xiàn)一個帶粘連效果的LoadingBar

    Loading效果相信大家應該都實現(xiàn)過,最近發(fā)現(xiàn)了一個不錯的效果,決定分享給大家,所以下面這篇文章主要給大家介紹了關于利用Android實現(xiàn)一個帶粘連效果的LoadingBar的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • 詳解Android Bitmap的使用

    詳解Android Bitmap的使用

    這篇文章主要介紹了詳解Android Bitmap的使用方法,幫助大家更好的理解和利用Android進行開發(fā),感興趣的朋友可以了解下
    2021-02-02
  • android studio如何通過 jni 調用第三方非標準 so庫

    android studio如何通過 jni 調用第三方非標準 so庫

    這篇文章主要介紹了android studio如何通過 jni 調用第三方非標準 so庫,調用第三方的so方法,但這個so內的方法不是標準的jni方法,這就需要我們自己寫jni然后鏈接到第三方so庫,通過jni調用so庫中的方法,需要的朋友可以參考下
    2025-04-04
  • android studio按鈕監(jiān)聽的5種方法實例詳解

    android studio按鈕監(jiān)聽的5種方法實例詳解

    這篇文章主要介紹了android studio按鈕監(jiān)聽的5種方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

堆龙德庆县| 东方市| 仁化县| 咸阳市| 雷波县| 昔阳县| 巴塘县| 云林县| 全州县| 隆尧县| 镇江市| 湄潭县| 临潭县| 西贡区| 新闻| 甘孜| 垣曲县| 新化县| 南华县| 贵定县| 宜良县| 重庆市| 湄潭县| 中牟县| 永修县| 前郭尔| 新源县| 余江县| 昌邑市| 河池市| 抚顺县| 广河县| 河东区| 禹州市| 武山县| 灵宝市| 繁峙县| 阜宁县| 松阳县| 偏关县| 和政县|