对,
不知道你有没有整理过这个,我把一些东西捣碎在一起,我想按照你的要求去做,如果没有,那么嘿嘿。
我有一个在水平滚动条中加载的活动,这可能不是最好的方式,但它对我有用:
HolderActivity 类(在 HorizontalScrollView 类中加载的)我有:
int selectedItem;
public boolean onLongClick(View v, int position) {
selectedItem = position;
openContextMenu(v);
return true;
}
public boolean onItemClick(int position) {)//do what you want here on click (press)
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
String[] menuItems = {"Menu item 1 text", "Cancel"};
for (int i = 0; i<menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItemsRemove[i]);
}
menu.setHeaderTitle("My menu title");
}
在您的 HorizontalScrollView 类的构造函数中,我通过其中的上下文,如下所示:
public MyScroller(Context context) {
super(context);
this.context = context;
}
我有一种方法可以从名为 setFeatureItems 的 ArrayList 创建项目,如下所示:
public void setFeatureItems(ArrayList<MyListEntity> items){}
在此方法中,我添加了一个 GestureDetector,将上下文传递给每个项目,如下所示:
mGestureDetector = new GestureDetector(context, new MyGestureDetector());
MyGestureDetector 嵌套类引用了所有重要的 parentActivity,如下所示:
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent arg0) {
parentActivity.onLongClick(MyScroller.this, mActiveFeature);
};
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
parentActivity.onItemClick(mActiveFeature);
return true;
};
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
//right to left
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int featureWidth = getMeasuredWidth();
mActiveFeature = (mActiveFeature < (mItems.size() - 1))? mActiveFeature + 1:mItems.size() -1;
smoothScrollTo(mActiveFeature*featureWidth, 0);
return true;
}
//left to right
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int featureWidth = getMeasuredWidth();
mActiveFeature = (mActiveFeature > 0)? mActiveFeature - 1:0;
smoothScrollTo(mActiveFeature*featureWidth, 0);
return true;
}
} catch (Exception e) {
Log.e("Fling", "There was an error processing the Fling event:" + e.getMessage());
}
return false;
}
}
我已经从现有项目中删除了这个,所以可能存在我没有让它足够通用的残余,我希望这有意义或有帮助,如果我可以添加更多细节,请告诉我