1. 程式人生 > >Android MultiPhotoContainer多圖選擇容器 快速釋出動態,意見反饋

Android MultiPhotoContainer多圖選擇容器 快速釋出動態,意見反饋

   這是我第一次在CSDN上發表部落格,11年註冊過CSDN,不過基本都是copy他人的資源。在這裡發現很多牛人,也學到很多知識,近來不忙,常常思緒萬千,其中不乏關於Android開發的想法。 

我認為優秀的程式設計師應該是想方設法讓自己越來越懶,或者讓團隊更閒,這樣就有更多時間去學習新的知識,或者去發展自己的愛好。這樣就要求程式碼的封裝要好,靈活,易用,健壯,這個是好的程式碼最基本的特點,什麼叫極簡?就是隻要聊聊幾行程式碼,就能實現一個複雜的功能,而且不用擔心美觀和效能的問題。

MultiPhotoContainer是一個圖片選擇容器,適用於釋出動態,意見反饋,釋出需求等,相簿展示頁面是在github上lovetuzitong/MultiImageSelector基礎上做的,MultiImageSelector這個開源庫非常不錯,開啟一個圖片選擇頁面,選擇完獲得回撥的圖片路徑,比如:

     Intent intent = new Intent(this, MultiImageSelectorActivity.class);
        intent.putExtra(MultiImageSelectorActivity.EXTRA_SHOW_CAMERA, true);//是否展示拍照圖片
        intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, 1);//最多選取幾張
        intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, MultiImageSelectorActivity.MODE_SINGLE);//單選
        startActivityForResult(intent, FeedBackActivity.REQUEST_IMAGE);

這樣通過 

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE) {
            if (resultCode == RESULT_OK) {
                List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);
                
            }
        }
    }

就能拿到圖片路徑

看起來是很方便,但事實上我們好要做不少事,首先要頂一個ViewGroup,然後一個一個addView,展示方式有可能是水平也可能是GridView的網格型別,而且還要刪除,瀏覽,長按抖動等效果,還是要一堆程式碼啊!居於這個問題,MultiPhotoContainer可以馬上搞定!

先說說MultiPhotoContainer的功能吧,當前的為版本1.0,後續會優化和擴充套件

#Version 1.0
 1,可以修改加號按鈕,刪除按鈕的圖片,圖片的圓角半徑 
 2,可以自定義佈局樣式,是水平滑動還是以GridView的形式展示
 3,可以自定義圖片的間距,左右間距和上下間距
 4,有長按抖動效果
 5,有圖片交換功能(待續)
 6,有圖片瀏覽功能

如何用呢,往下看(Android Studio)

將multiphoto_container.aar複製到libs下
build.gradle配置
//加入

repositories {
    flatDir {
        dirs'libs'
    }
   }
   dependencies {
    compile 'com.squareup.picasso:picasso:2.4.0'
    compile(name:'multiphoto_container', ext:'aar')
    }
    attrs.xml中可修改引數
   
 <declare-styleable name="MultiPhotoSelectContainer">
        <!-- 圖片顯示垂直間距 -->
        <attr name="multiPhoto_vertical_margin" format="dimension" />
        <!-- 圖片顯示水平間距 -->
        <attr name="multiPhoto_horizontal_margin" format="dimension" />
        <!-- 相對於螢幕左邊距 -->
        <attr name="multiPhoto_page_margin_left" format="dimension" />
        <!-- 相對於螢幕右邊距 -->
        <attr name="multiPhoto_page_margin_right" format="dimension" />
        <!-- 圖片顯示最大個數,預設9個 -->
        <attr name="multiPhoto_count" format="integer" />
        <!-- 圖片顯示列數,預設5列 -->
        <attr name="multiPhoto_colomns" format="integer" />
        <!-- 圖片顯示大小,可自動適配,確保顯示全 -->
        <attr name="multiPhoto_photo_size" format="dimension" />
        <!-- 圖片顯示圓角半徑 -->
        <attr name="multiPhoto_photo_radius" format="dimension" />
        <!-- 刪除按鈕替換資源ID -->
        <attr name="multiPhoto_delete_resId" format="reference" />
        <!-- 增加按鈕替換資源ID -->
        <attr name="multiPhoto_add_resId" format="reference" />
    </declare-styleable>

引用
<com.multiphoto.select.MultiPhotoSelectContainer
   xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/multiphoto_container_select"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/usercenter_operation_gridview"
            android:clipChildren="false"
            app:multiPhoto_horizontal_margin="5dp"
            app:multiPhoto_page_margin_left="15dp"
            app:multiPhoto_page_margin_right="15dp"
            app:multiPhoto_photo_size="60dp"
            />
Source中可修改

    1 setCompressKbSize   //圖片大小上限 預設2000KB
    2 setCurrentLayoutType //設定佈局樣式,LayoutType_Horizontal(水平)LayoutType_Vertical(網格)

 目標

public ArrayList<String> getPhotoList();//得到圖片路徑列表

有沒發現這個容器的好處是符合業務邏輯,壓縮圖片處理,而且使用起來非常方便,對於要釋出動態,意見反饋的需求,是不是分分鐘搞定?

先來張截圖給大家看下效果

程式碼資源下載連結: