我有以下的代碼,使ListView控件看起來像一個垂直畫廊作出這樣一個垂直畫廊一個ListView行爲
public class VerticalGallery extends ListView {
private View currentDisplayingView;
private int currentPosition;
public VerticalGallery(Context context, List<Page> pages) {
super(context);
setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
currentDisplayingView = view;
currentPosition = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
setAdapter(new PageAdapter(context, pages));
setCacheColorHint(Color.TRANSPARENT);
}
public boolean onTouchEvent(MotionEvent evt) {
if (currentDisplayingView != null && currentDisplayingView.onTouchEvent(evt))
return true;
PageAdapter adapter = (PageAdapter) getAdapter();
if (currentPosition == adapter.list.size() - 1)
return false;
// TODO: Handle events and swipe somewhere
return super.onTouchEvent(evt);
}
public class PageAdapter extends BaseAdapter {
private Context context;
private List<Page> list;
public PageAdapter(Context c, List<Page> pages) {
context = c;
list = pages;
}
public int getCount() {
return list.size();
}
public Page getItem(int position) {
return list.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = getItem(position).generateView(context);
view.setLayoutParams(new ListView.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
return view;
}
}
}
但是,有一些行爲,我也需要模擬:
- 集中化a View: 當一個新的視角來臨時,我需要將其集中在我的顯示器上。
- 消防
onItemSelected
事件: 我需要這些,因爲我調度事件到當前視圖,並讓ListView
滾動只有當currentView返回上的TouchEvent假的,我不需要完全ItemSelected事件,這可能是類似的東西。 - 而另一個問題是,如果用戶向上滑動,我應該只翻譯一個視圖(不是根據手勢的速度而定)。
任何會讓我這樣做的組件也將是一個有用的答案。
編輯: 其實,我解決了這個問題,這個解決方案Using Animation to swipe views但我會繼續打開這個問題。
你可以給更多的代碼,並告訴如何使用ScrollViewVertical – pengwang
該代碼缺少的唯一東西是分頁布爾標誌。 –