向下拖拽展示更多之自定義 RecyclerView

2021-08-04 10:47:03 字數 2748 閱讀 6736

自定義 recyclerview 向下拖拽展示更多;

這裡已經做到了與 adapter 的分離,只要adapter 實現 dragminheightadapterlistener 介面即可,詳細**附帶注釋如下:

/**

* created by yangshuai on 2017/7/26.

* */

public class dragminheightrecyclerview extends recyclerview

/*** 限定乙個最高高度

*/private int maxheight = screenutil.dip2px(200);

/*** 高度變化的屬性動畫

*/private valueanimator mheightchangevalueanimator;

/*** 持有 layoutmanager

*/private gridlayoutmanager mlayoutmanager;

/*** 持有 dragminheightadapterlistener

*/private dragminheightadapterlistener mdragminheightadapterlistener;

public dragminheightrecyclerview(context context)

public dragminheightrecyclerview(context context, @nullable attributeset attrs)

public dragminheightrecyclerview(context context, @nullable attributeset attrs, int defstyle)

private float mlasttouchy;

private int mcurrentheight;

private void init(attributeset attrs, int defstyle)

@override

public void ontouchevent(recyclerview rv, motionevent e)

@override

public void onrequestdisallowintercepttouchevent(boolean disallowintercept)

});if (attrs != null)

}/**

* 判斷是否需要攔截觸控事件

* @param e motionevent

* @return true 攔截; false 不攔截;

*/private boolean isneedinterceptmovetouch(motionevent e) else if (mdragminheightadapterlistener != null && mlayoutmanager != null)}}

return false;

}@override

public boolean ontouchevent(motionevent e)

float currenttouchy = e.gety();

switch (e.getaction())

// 處理拖拽時高度變更;

getlayoutparams().height = (int) (mcurrentheight + durationy);

requestlayout();

getparent().requestdisallowintercepttouchevent(true);

return true;

default:

// 釋放觸控時,使用動畫移動到指定的最大或最小的高度;沒有實現拋的功能;

int endheight;

if (getlayoutparams().height > getminimumheight() + (maxheight - getminimumheight()) / 2) else

mheightchangevalueanimator = valueanimator.ofint(getlayoutparams().height, endheight);

mheightchangevalueanimator.addupdatelistener(new valueanimator.animatorupdatelistener()

}});

mheightchangevalueanimator.setduration(100).start();

break;

}return super.ontouchevent(e);

}/**

* 滑動到選擇項的位置

*/public void resetsmoothshowposition() catch (exception e1)

}/**

* 立即移動到選擇項的位置,無動畫

*/public void resetshowposition() catch (exception e1)

}@override

public void setlayoutmanager(layoutmanager layout)

}@override

public void setadapter(adapter adapter) }}

});}}}

自定義可拖拽view

我們知道view的繪製有三個重要的過程分別是measure,layout,draw.measure負責測量view的尺寸,layout負責定位view的位置,draw負責把view繪製到上。我們這就是通過layout重新定位view。public class custommoveview exten...

element tree自定義拖拽xianz

目錄 功能說明 效果圖 可通過拖拽改變,資料巢狀順序 首層節點 主幹 不可拖拽,不可以有同級節點 主幹,限制僅有乙個主幹 邏輯符號藍色 edit node,data remove node,data 頁面資料 data 節點型別識別 nodetotle a tree資料拖拽 allowdrop dr...

自定義QTextEdit實現拖拽功能

qtextedit是乙個可以顯示各種複雜型別資訊的控制項,比如文字資訊,html等,有時作為輸入框我們需要實現拖拽展示或傳送一些檔案等,而如果要實現拖拽傳送檔案,這個時候需要過載dropevent事件和insertfrommimedata 函式,在使用這兩個函式的過程中,發現拖拽檔案時,source...