listView橫向滑動

2021-06-27 22:03:11 字數 3466 閱讀 3608

listview橫向滑動很少使用,但是有時候也會用到,我也是在網上看到了大神自定義了乙個listview可以橫向滑動。試了下很不錯,希望大家能用的上。自定義**如下:

public class horizontallistview extends adapterview

private synchronized void initview()

@override

public void setonitemselectedlistener(

adapterview.onitemselectedlistener listener)

@override

public void setonitemclicklistener(adapterview.onitemclicklistener listener)

@override

public void setonitemlongclicklistener(

adapterview.onitemlongclicklistener listener)

private datasetobserver mdataobserver = new datasetobserver()

invalidate();

requestlayout();

} @override

public void oninvalidated()

}; @override

public listadapter getadapter()

@override

public view getselectedview()

@override

public void setadapter(listadapter adapter)

madapter = adapter;

madapter.registerdatasetobserver(mdataobserver);

reset();

} private synchronized void reset()

@override

public void setselection(int position)

private void addandmeasurechild(final view child, int viewpos)

addviewinlayout(child, viewpos, params, true);

child.measure(

measurespec.makemeasurespec(getwidth(), measurespec.at_most),

measurespec.makemeasurespec(getheight(), measurespec.at_most));

} @override

protected synchronized void onlayout(boolean changed, int left, int top,

int right, int bottom)

if (mdatachanged)

if (mscroller.computescrolloffset())

if (mnextx <= 0)

if (mnextx >= mmaxx)

int dx = mcurrentx - mnextx;

removenonvisibleitems(dx);

filllist(dx);

positionitems(dx);

mcurrentx = mnextx;

if (!mscroller.isfinished())

});} }

private void filllist(final int dx)

filllistright(edge, dx);

edge = 0;

child = getchildat(0);

if (child != null)

filllistleft(edge, dx);

} private void filllistright(int rightedge, final int dx)

if (mmaxx < 0)

mrightviewindex++;

} }private void filllistleft(int leftedge, final int dx)

} private void removenonvisibleitems(final int dx)

child = getchildat(getchildcount() - 1);

while (child != null && child.getleft() + dx >= getwidth())

} private void positionitems(final int dx)

} }public synchronized void scrollto(int x)

@override

public boolean dispatchtouchevent(motionevent ev)

protected boolean onfling(motionevent e1, motionevent e2, float velocityx,

float velocityy)

requestlayout();

return true;

} protected boolean ondown(motionevent e)

private ongesturelistener mongesture = new gesturedetector.******ongesturelistener()

@override

public boolean onfling(motionevent e1, motionevent e2, float velocityx,

float velocityy)

@override

public boolean onscroll(motionevent e1, motionevent e2,

float distancex, float distancey)

requestlayout();

return true;

} @override

public boolean onsingletapconfirmed(motionevent e)

if (monitemselected != null)

break;}}

return true;

} @override

public void onlongpress(motionevent e)

break;}}

} private boolean iseventwithinview(motionevent e, view child)

};}

UITableView 的橫向滑動實現

為了實現橫向滑動的控制項,可以繼承類 uiscrollview 或類 uiview 自定義可以橫向滑動的控制項,這裡通過 uitableview 的旋轉,實現可以橫向滑動的控制項。先說明與實現相關的幾個概念 自定義乙個 uiview 的子類 horizontaltableview 在其中新增乙個 u...

橫向滑動(scroll view)巢狀for迴圈

1 設定橫向滑動 scroll x true 2 scroll view設定寬度及white space屬性。3 item設定display inline block屬性。xml布局 container scroll x true設定橫向滑動 scroll view設定寬度 true item co...

可橫向或部分橫向滑動的列表實現

先看下效果 首先需要構造乙個header部分,header部分分為固定header和滑動header,滑動header採用橫向scrollview實現 private void bindheader rightheader new linearlayout context for string st...