【发布时间】:2011-09-13 04:42:06
【问题描述】:
我有以下代码使 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;
}
}
}
但我还需要模拟一些行为:
- 集中视图: 当出现新视图时,我需要将其集中在我的显示器上。
- 触发
onItemSelected事件: 我需要这些,因为我将事件分派到当前视图,并且仅当 currentView 在 touchEvent 上返回 false 时才让ListView滚动,我不需要完全是 ItemSelected 事件,这可能是类似的。 - 另一个问题是,如果用户向上滑动,我应该只翻译一个视图(根据手势的速度而不是几个)。
任何能让我这样做的组件也将是一个有用的答案。
编辑: 实际上,我用这个解决方案 Using Animation to swipe views 解决了这个问题,但我会保持这个问题的开放性。
【问题讨论】:
标签: android android-listview android-adapter android-gesture