自定義 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...