仿Nice首頁圖片列表9圖樣式,并實(shí)現(xiàn)拖拽效果

寫在開頭:

為什么要實(shí)現(xiàn)這么個(gè)功能,當(dāng)然不是我閑得慌,當(dāng)然是產(chǎn)品的需求。身為碼農(nóng)你只能想方設(shè)法去實(shí)現(xiàn),即使留給你的時(shí)間已經(jīng)不多了,想起一句話:這個(gè)需求很簡單,怎么實(shí)現(xiàn)我不管,月底上線


警察.png

看看產(chǎn)品需要的什么吧

image.png

效果圖太多就不殺貓了,直接上之前實(shí)現(xiàn)的demo效果圖吧


demo.gif

分析Or撕逼

初一看,恩9種樣式,宮格布局的,這個(gè)應(yīng)該很簡單,還要實(shí)現(xiàn)拖拽,RecyclerView + GridLayoutManager設(shè)置spanSize + ItemTouchHelper 一波帶走;
再一看,我擦這3張的和6張的怎么這么是這樣的?

3.png
6.png

左邊的好說,右邊的喂??有點(diǎn)類似瀑布流的樣子


頭大.png

然后,大話說出去了,解決唄。貓:然而事情并沒有這么簡單

coder.png

實(shí)現(xiàn)步驟Or踩坑過程

首先,時(shí)間上,規(guī)定時(shí)間需要上線版本,這個(gè)布局留給我的時(shí)間有且僅有充裕的1天,對于實(shí)現(xiàn)過類似功能的人來說,一天確實(shí)很充裕;
其次,功能上,邏輯并不復(fù)雜,條理也很清晰,就是9張圖,9種排列方式,用到的地方兩處:
1)發(fā)布的時(shí)候需要拖拽;
2)顯示詳情的時(shí)候需要展示,不能拖拽;
方案有:
1.寫9種靜態(tài)布局;
2.addview的方式動態(tài)添加布局;
3.萬能的recyclerView

最后排除1、2方案,采用方案3
時(shí)間上,自定義LayoutManager可能來不及,不知里面有什么坑,只好去找輪子


車技.jpg

讓我們看看有什么輪子:
FreeSizeDraggableLayout
Android 布局之GridLayout
我發(fā)現(xiàn)這兩個(gè),都不是我想要的,具體可去看源碼和實(shí)現(xiàn)
然后又找到兩個(gè)關(guān)于自定義recyclerview的庫
two-way
vlayout
找到以上庫的時(shí)候,半天已經(jīng)過去,只剩下半天“充?!钡臅r(shí)間了

fuck.png

當(dāng)時(shí)導(dǎo)入two-way庫的時(shí)候出現(xiàn)了問題,一直build不起,只好選擇vlayout,畢竟時(shí)間不等人;上面的demo.gif是用vlayout實(shí)現(xiàn)的;后面我試了two-way庫,也實(shí)現(xiàn)了這個(gè)效果,喜歡的朋友可以去試試

貼上最終實(shí)現(xiàn)效果:

列表.gif
拖拽.gif

拖拽動畫不是很理想,希望有小伙伴能提點(diǎn)意見怎么修改這個(gè)拖拽動畫,我簡單的把這個(gè)控件封裝了一下,便于以后使用

使用方法

項(xiàng)目build.gradle添加
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
依賴:
    dependencies {
        compile'com.github.wobiancao:ImageNice9Layout:1.0.1'
    }

git clone https://github.com/wobiancao/ImageNice9Layout.git
然后依賴
compile project(':imagenice9lib')
或者遠(yuǎn)程依賴

compile 'com.wobiancao:imagenice9lib:1.0.1'

需要配置本地gradle.properties文件
VLAYOUT_VERSION = 1.0.6//vlayout版本號
GLIDE_VERSION = 3.7.0//glide版本號
ANDROID_BUILD_MIN_SDK_VERSION=16//minSdkVersion
ANDROID_BUILD_TARGET_SDK_VERSION=23//targetSdkVersion
ANDROID_BUILD_TOOLS_VERSION=25.0.2//buildToolsVersion
ANDROID_BUILD_SDK_VERSION=25//compileSdkVersion

2.屬性:
app:nice9_itemMargin="5dp"http://每個(gè)圖片之間的間距
app:nice9_candrag="false"http://是否支持拖拽,默認(rèn)false
新增屬性
<attr name="nice9_tipText" format="reference|string"/>//提示文字 <attr name="nice9_tipColor" format="reference|color"/>//提示文字顏色 <attr name="nice9_tipBgColor" format="reference|color"/>//提示文字背景色 <attr name="nice9_tipBgDrawable" format="reference"/>//提示文字背景圖

3.使用,直接xml布局就行:

<wobiancao.nice9.lib.ImageNice9Layout
     android:id="@+id/item_nice9_image"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="8dp"
     app:nice9_itemMargin="5dp"
     app:nice9_candrag="false"/>```
4.可以公布的情報(bào)

/**
* 提示文字背景
**/
public void setTipBgDrawable(Drawable tipBgDrawable) {
mTip.setBackground(tipBgDrawable);
}

/**
 * 提示文字顏色
 **/
public void setTipColor(int tipBgColor) {
    mTip.setTextColor(tipBgColor);
}

/**
 * 提示背景顏色
 **/
public void setTipBgColor(int tipBgColor) {
    mTip.setBackgroundColor(tipBgColor);
}

/**
 * 提示文字
 **/
public void setTipText(String string) {
    mTip.setText(string);
}

public void setTipText(@StringRes int string) {
    setTipText(getResources().getString(string));
}

/**
* 獲取更改后的圖片列表
**/
public List<String> getAfterPicList() {
return mMulitVAdapter.getPictures();
}

####GitHub
[ImageNice9Layout](https://github.com/wobiancao/ImageNice9Layout)
如果覺得本文或本庫對您有所幫助,就點(diǎn)個(gè)star吧?

![emmm.png](http://upload-images.jianshu.io/upload_images/1216032-512efea90ab7705b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####Demo
[體驗(yàn)apk](https://fir.im/nice9)
####感謝
[vlayout](https://github.com/alibaba/vlayout)
[pixabay](https://pixabay.com/)
[glide](https://github.com/bumptech/glide)

####加點(diǎn)徽章?
[ ![](https://api.bintray.com/packages/a12a15a05/maven/imagenice9lib/images/download.svg) ](https://bintray.com/a12a15a05/maven/imagenice9lib/_latestVersion)
![](https://img.shields.io/github/stars/wobiancao/ImageNice9Layout.svg)![](https://img.shields.io/twitter/url/https/github.com/wobiancao/ImageNice9Layout.svg?style=social
)
![](https://img.shields.io/badge/language-android-green.svg)
![](https://img.shields.io/badge/license-Apache2.0-000000.svg)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,191評論 25 708
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,170評論 22 665
  • 最近做了一個(gè)Android UI相關(guān)開源項(xiàng)目庫匯總,里面集合了OpenDigg 上的優(yōu)質(zhì)的Android開源項(xiàng)目庫...
    OpenDigg閱讀 17,627評論 6 222
  • 01 和朋友一起看球賽。B隊(duì)明顯實(shí)力弱于A隊(duì)。 大家都不看好B隊(duì)。你有點(diǎn)不平,隨口來了句:“我挺B隊(duì),應(yīng)該不會輸?shù)?..
    小黃人的自由之路閱讀 1,216評論 0 0
  • 誰將滴落的水吹碎 落入掌心,涼了誰? 誰將路過的風(fēng)染灰 滄桑了前路,亦無回 此時(shí)放手,飛絲斷難歸 酌念青春,共譜曲...
    水搖絹閱讀 233評論 0 3

友情鏈接更多精彩內(nèi)容