仿探探左右滑動卡片的效果很多
http://ju.outofmemory.cn/entry/328946
這裏,我是用的
https://github.com/xiepeijie/SwipeCardView
我的單詞卡片功能,都是在這個項目上進行的修改
本Demo通過精確計算單詞的位置,在onTouch中處理了點擊事件,所以,“點擊單詞”觸發跳轉單詞詳情頁和“按住單詞滑動卡片”,這兩者,不衝突。但是請注意,精確計算單詞位置,和使用的佈局是有關係的。有的佈局就不能精確計算,只能給單詞單獨添加點擊事件,這樣,會出現,按住單詞滑動,卡片不滑動的情況
爲了更好的理解和使用,請詳細讀一下 下面的“使用相關說明”、“單詞定位計算說明”
先上一些效果圖:
1、APP首頁
2、常規(滿數據)“一卡多詞”模式
3、數據不足“一卡五詞”的情況
4、“一卡一詞”,釋義較短(沒有超過一行)的情況
5、“一卡一詞”釋義較長,超過一行的情況
上圖中,紅黑線段說明:
1、一卡多詞模式,用於標明,單詞展示區域,即:點擊橫、豎線約束的區域,可以實現跳轉到單詞詳情頁
2、一卡一次模式,橫線標明這段橫向區域內可以觸發點擊事件,而豎線,是對橫向區域的再次約束。
橫向紅線和豎向紅線,是單詞的展示區域;橫向紅線和豎向黑線,是釋義的展示區域
特別說明:此Demo有2個明顯缺點
1、不支持卡片撤回。即:卡片劃出去後,不支持將滑出的卡片撤回來
2、“一卡一次”模式下,“釋義”區域的計算,有漏洞,只考慮了“釋義沒有超過一行”的情況。即:釋義多行時,點擊釋義的接近底部的區域,是不會觸發跳轉詳情頁的事件。
這塊,請自行修改。
在 DataUtil 中的 computeOneCardOneWordCoordinates 方法中,計算行數的位置
使用相關說明
1、當卡片有多層時,第一張下面的卡片,是縮小的,當第一張劃出去,第二張隨着滑動而放大到正常大小。如果不想要這個效果,
SwipeFlingAdapterView 下,
註釋掉 adjustChildView、adjustChildrenOfUnderTopView這2個方法
2、如果想後面的卡片,縮小後,在第一張的底部漏出來一些,在佈局中,需要設置
swipe:y_offset_step
如:
<......SwipeFlingAdapterView
android:id="@+id/swipe_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
swipe:min_adapter_stack="2"
swipe:max_visible="2"
swipe:y_offset_step="28dp"/>
3、卡片滑動靈敏度調整
FlingCardListener中,
/**
* 鬆開手指後,卡片滑出屏幕靈敏度調整規則
* <p>
* 1、左滑,增大leftBorder()方法中,"3.8"的值,可以減小靈敏度,讓用戶滑動更多距離,纔會使得卡片移出屏幕
* <p>
* 2、右滑,減小rightBorder()方法中,"2.2"的值,可以減小靈敏度,讓用戶滑動更多距離,纔會使得卡片移出屏幕
*/
public float leftBorder() {
return parentWidth / 3.8f;
}
public float rightBorder() {
return 2.2f * parentWidth / 3f;
}
4、關於單詞點擊。
如果給單詞直接設置點擊事件(setOnClickListener),那麼,就不需要進行座標計算了。但是引發出一個問題,按住單詞,滑動手指,卡片不會隨之滑動。這是,因爲,單詞的點擊事件,把滑動事件消費掉了。
其實,框架中,在onTouch中,已經判斷處理過了,在一定範圍內,會視爲點擊。
詳見:
FlingCardListener -> onTouch -> resetCardViewOnStack -> mFlingListener.onClick
計算得到的定位數據的使用,在 FlingCardListener -> getWordIndex
最後,點擊事件的回調,會回到卡片界面的onItemClicked
(本Demo中,是 CardActivity -> onItemClicked)
5、卡片界面(Demo中是CardActivity)
removeFirstObjectInAdapter 中,必須,必須,必須要有adapter?.remove(0)
否則,第一張滑出去後,後面的卡片,均無法滑動
單詞定位計算說明:
1、關於狀態欄等的計算,請看
DataUtil 中的 computeCardDataCoordinates
2、我現在的佈局,大體是這樣的:
不建議使用下面的形式佈局,不然,很容易出現定位偏差
出現偏差的後果是,一卡多詞時,單詞區域計算錯誤,點擊第4個單詞的下半部分,會觸發第5個單詞的點擊事件。
還有,如果卡片使用 .9等帶陰影的背景圖,根本不建議使用定位算法了。直接給單詞加個點擊事件吧,雖然會出現 “按住單詞滑動,卡片不滑動”的問題,但是,至少整體功能是對的。且釋義不能加點擊事件,因爲點擊事件會消費滑動事件,點擊的熱區越大,能引起滑動的熱區就越小。