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

Android自定義組件獲取本地圖片和相機拍照圖片

 更新時間:2017年01月17日 11:54:13   作者:張小貝_  
這篇文章主要為大家詳細介紹了Android自定義組件獲取本地圖片和相機拍照圖片的相關(guān)資料,非常炫酷的效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

iOS中有封裝好的選擇圖片后長按出現(xiàn)動畫刪除效果,效果如下 

這里寫圖片描述 

而Android找了很久都沒有找到有這樣效果的第三方組件,最后懶得找了還是自己實現(xiàn)這效果吧

選擇圖片后還可對圖片進行剪裁 

這里寫圖片描述

當(dāng)然,代碼中還有很多不完善的地方,我接下來會繼續(xù)完善這個組件的
已經(jīng)上傳到開源社區(qū),歡迎大家來Star啊~

Demo源碼:傳送門

設(shè)計中的碰到的一些問題和解決思路

1.如何讓加號圖片顯示在GridView最后面

首先在調(diào)用GridAdapter構(gòu)造方法時就加載加號圖片

 /**
 * 圖片適配器
 * @param context 上下文
 * @param imagesum 最大可添加圖片數(shù)
 */
 public GridAdapter(Context context, int imagesum) {
 this.context = context;
 this.imageSum = imagesum;
 // 加號圖片
 mAddBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_add_image);
 }

然后在getCount()方法里對圖片數(shù)據(jù)集合加1,在該位置上添加加號圖片

 @Override
 public int getCount() {
 // 數(shù)據(jù)集合加一,在該位置上添加加號
 return imageItemData == null ? 0 : imageItemData.size() + 1;
 }

最后在getView()方法中,每次顯示圖片時都對數(shù)據(jù)集合中的元素數(shù)量進行判斷,如果數(shù)據(jù)集合的數(shù)量大于position,則表示需要顯示加號圖片

 if (imageItemData != null && imageItemData.size() > position) {
 // 正常圖片
 } else {
 // 加號圖片
 }

這樣就能保證加號圖片一直在GridView最后一個item上

2.如何顯示出刪除按鈕

在item布局時,在圖片的右上角覆蓋一層刪除按鈕,在Adapter中對這個圖片的顯示和隱藏進行處理

/** 判斷是否顯示清除按鈕 true=顯示 */
 private boolean showImageClear = false;
 //對外提供顯示和隱藏的方法
 /**
 * 設(shè)置圖片顯示狀態(tài)
 * @param clear 圖片狀態(tài)
 */
 public void setClearImgShow(boolean clear) {
 showImageClear = clear;
 }

 /**
 * 圖片顯示狀態(tài)
 * @return 狀態(tài) true=顯示
 */
 public boolean getClearImgShow() {
 return showImageClear;
 }

刪除按鈕默認不顯示,當(dāng)用戶長按圖片時就顯示出來

// 長按顯示刪除按鈕
mGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
 @Override
 public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
 if (!(position == gridAdapter.imageItemData.size())) {
 // 如果刪除按鈕已經(jīng)顯示了則不再設(shè)置
 if (!gridAdapter.getClearImgShow()) {
 gridAdapter.setClearImgShow(true);
 gridAdapter.notifyDataSetChanged();
 }
 }
 // 返回true,停止事件向下傳播
 return true;
 }
});

這里需要攔截長按點擊事件,把返回值設(shè)置為true,因為我們還設(shè)置了點擊事件的監(jiān)聽,如果不攔截事件,那么長按事件結(jié)束后還會同時執(zhí)行單擊事件

最后關(guān)鍵的一點,在GridAdapter類中的getView方法里進行控制,通過getClearImgShow方法獲取刪除圖片是否需要顯示,如果返回為true則顯示出來,并獲取動畫實例,讓圖片開始執(zhí)行動畫效果

 if (imageItemData != null && imageItemData.size() > position) {
 // 正常顯示
 // 判斷是否需要顯示刪除按鈕 ,為true則顯示,并執(zhí)行動畫效果
 if (getClearImgShow()) {
 holder.imgclear.setVisibility(View.VISIBLE);
 CustomRotateAnim anim = CustomRotateAnim.getCustomRotateAnim();
 anim.setDuration(300);
 anim.setRepeatCount(2);
 anim.setInterpolator(new LinearInterpolator()); // 設(shè)置為勻速
 holder.img.startAnimation(anim);
 } else {
 // 關(guān)閉動畫,隱藏刪除按鈕
 holder.img.clearAnimation();
 holder.imgclear.setVisibility(View.GONE);
 }
 holder.img.setImageBitmap(PhotoBitmapUtil.getCompressPhoto(imageItemData.get(position)));
 } else {
 ......省略......
 }

3.如何設(shè)置當(dāng)圖片達到最大數(shù)時,隱藏加號按鈕

在使用GridAdapter的時候,調(diào)用方需要傳入一個最大圖片數(shù):

gridAdapter = new GridAdapter(MainActivity.this, 8);
mGridView.setAdapter(gridAdapter);

然后在GridAdapter中接收這個最大圖片數(shù),并在getView()方法中對加號圖片的顯示進行管控

 if (imageItemData != null && imageItemData.size() > position) {
 // 顯示選擇的圖片
 ......省略......
 } else {
 // 顯示加號按鈕
 // 圖片數(shù)達到最大限制時隱藏加號圖片
 if (imageItemData.size() != imageSum) {
 holder.imgclear.setVisibility(View.GONE); // 不顯示刪除按鈕
 holder.img.clearAnimation(); // 去除動畫
 holder.img.setImageBitmap(mAddBitmap);
 }
 }

“gridAdapter.getCount() - 1”是因為我們在添加加號圖片時加了1,所以使用時需要減1

 // 點擊圖片
 mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 // 如果單擊時刪除按鈕處在顯示狀態(tài),則隱藏它
 if (gridAdapter.getClearImgShow()) {
  gridAdapter.setClearImgShow(false);
  gridAdapter.notifyDataSetChanged();
 } else {
  if (gridAdapter.getCount() - 1 == position) {
  // 判斷是否達到了可添加圖片最大數(shù)
  if (!(gridAdapter.imageItemData.size() == gridAdapter.imageSum)) {
  selectPhoto.showPopupSelect(mGridView);
  }
  } else {
  popupViewGridPhoto(position);
  }
 }

 }
 });

4.如何降低圖片加載時的內(nèi)存消耗量

要在GridView中顯示那么多的圖片,肯定是需要多圖片進行壓縮處理的,不然很容易出現(xiàn)OOM錯誤
這里通過質(zhì)量壓縮,降低加載圖片的內(nèi)存大小

 /**
 * 把原圖按1/5的比例壓縮
 *
 * @param path 原圖的路徑
 * @return 壓縮后的圖片
 */
 public static Bitmap getCompressPhoto(String path) {
 BitmapFactory.Options options = new BitmapFactory.Options();
 options.inJustDecodeBounds = false;
 options.inSampleSize = 5; // 圖片的長寬設(shè)置為原來的五分之一
 Bitmap bmp = BitmapFactory.decodeFile(path, options);
 options = null;
 return bmp;
 }

也可以通過其它的方式,可以參考這篇博客《Android避免內(nèi)存溢出(Out of Memory)方法總結(jié)》

5.如何防止部分手機拍照后圖片被旋轉(zhuǎn)的問題

在測試中,部分三星手機拍攝完照片后會把圖片旋轉(zhuǎn)90度,這個設(shè)計實在是坑,為此還得專門為了這個問題進行處理,每次拍攝完照片后都要獲取圖片的旋轉(zhuǎn)角度,如果圖片被旋轉(zhuǎn)了的話就再旋轉(zhuǎn)回去
可以參考這篇博客
《Android 解決部分手機拍照后獲取的圖片被旋轉(zhuǎn)的問題》

6.如何讓圖片左右搖擺

想要實現(xiàn)圖片左右搖擺的效果,需要我們自定義Animation
可參看這篇博客
《Android 自定義Animation實現(xiàn)View搖擺效果》

這里就先介紹這么多,詳細的解釋代碼注釋中都有的,就不再多說啦

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

相關(guān)文章

  • 淺談Android Activity與Service的交互方式

    淺談Android Activity與Service的交互方式

    下面小編就為大家?guī)硪黄獪\談Android Activity與Service的交互方式。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 基于VSTS的Xamarin.Android持續(xù)集成步驟詳解

    基于VSTS的Xamarin.Android持續(xù)集成步驟詳解

    這篇文章主要介紹了基于VSTS的Xamarin.Android持續(xù)集成步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Android 開發(fā)之旅:詳解view的幾種布局方式及實踐

    Android 開發(fā)之旅:詳解view的幾種布局方式及實踐

    這篇文章主要介紹了Android 開發(fā)之旅:詳解view的幾種布局方式及實踐,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • Android實現(xiàn)視頻彈幕功能

    Android實現(xiàn)視頻彈幕功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)視頻彈幕功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Android自定義控件之圓形進度條動畫

    Android自定義控件之圓形進度條動畫

    這篇文章主要為大家詳細介紹了Android自定義控件之圓形進度條動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • listview里子項有按鈕的情況使用介紹

    listview里子項有按鈕的情況使用介紹

    不知大家有沒有遇到過listview里子項有按鈕的情況哈,本文自定義了按鈕并且在布局中做了引用,適合初學(xué)者哦,感興趣的也可以了解下
    2013-03-03
  • windows10安裝adb/fastboot驅(qū)動超詳細圖文教程

    windows10安裝adb/fastboot驅(qū)動超詳細圖文教程

    這篇文章主要介紹了windows10安裝adb/fastboot超詳細圖文教程,安裝方法也很簡單,只要adb安裝成功,fastboot就安裝好了,文中給大家介紹了問題分析及解決方法,需要的朋友可以參考下
    2023-01-01
  • Android實現(xiàn)文字滾動播放效果的代碼

    Android實現(xiàn)文字滾動播放效果的代碼

    這篇文章主要介紹了Android實現(xiàn)文字滾動播放效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • android水平循環(huán)滾動控件使用詳解

    android水平循環(huán)滾動控件使用詳解

    這篇文章主要為大家詳細介紹了android水平循環(huán)滾動控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android編程ViewPager回彈效果實例分析

    Android編程ViewPager回彈效果實例分析

    這篇文章主要介紹了Android編程ViewPager回彈效果,以實例形式較為詳細的分析了ViewPager回彈效果的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10

最新評論

三台县| 玛曲县| 平山县| 鄯善县| 淮北市| 安岳县| 碌曲县| 和林格尔县| 武平县| 怀安县| 乐亭县| 怀集县| 富裕县| 大埔县| 安溪县| 咸丰县| 财经| 大港区| 秦皇岛市| 时尚| 青州市| 叶城县| 友谊县| 甘孜| 怀安县| 盐边县| 临沭县| 贡觉县| 常德市| 昆明市| 洛阳市| 南充市| 滕州市| 论坛| 石台县| 云林县| 井冈山市| 颍上县| 洛阳市| 舞钢市| 蒙自县|