我解决了在 HorizontalListView.java 中实现以下方法的问题:
这用于检测 Action_UP(当用户将手指从所选视图上抬起并将相对布局绘制为默认颜色时):
@Override
public boolean onTouchEvent(MotionEvent event) {
if(habilitar){
if (event.getAction() == android.view.MotionEvent.ACTION_UP ||event.getAction() == android.view.MotionEvent.ACTION_CANCEL){
for(int i=0;i<getChildCount();i++){
View child = getChildAt(i);
if (isEventWithinView2(event, child)) {
if(mOnItemUnSelectedListener != null){
mOnItemUnSelectedListener.onItemUnSelected(child);
}
break;
}
if(mOnItemUnSelectedListener != null && child != null){
mOnItemUnSelectedListener.onItemUnSelected(child);
}
}
}
}
return true;
}
在 mOnGesture 手势检测器声明中,我将此功能添加到 onDown 方法。当用户在视图上按下时,这允许绘制包含内容的选定项目的相对布局:
for(int i=0;i<getChildCount();i++){
View child = getChildAt(i);
if (isEventWithinView2(e, child)) {
if(mOnItemSelected != null){
mOnItemSelected.onItemSelected(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
}
break;
}
}
然后我添加了一些侦听器以允许适配器绘制按下的视图,对于取消选择侦听器,我实现了以下接口:
private OnItemUnSelectedListener mOnItemUnSelectedListener;
public void setOnItemUnSelectedListener(OnItemUnSelectedListener listener ){
mOnItemUnSelectedListener = listener;
}
public interface OnItemUnSelectedListener{
public void onItemUnSelected(View v);
}
对于选定的监听器,我使用了类中已经定义的监听器:
private OnItemSelectedListener mOnItemSelected;
最后在我的适配器中,我设置了监听器:
HorizontalListView listview = (HorizontalListView) retval.findViewById(R.id.listviewH);
listview.setOnItemSelectedListener(this);
listview.setOnItemUnSelectedListener(this);
我根据用户是否按下视图来设置布局的颜色
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if(arg1.findViewById(R.id.marcoNota) != null){
arg1.findViewById(R.id.marcoNota).setBackgroundColor(Color.WHITE);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
@Override
public void onItemUnSelected(View v) {
if(v.findViewById(R.id.marcoNota) != null){
v.findViewById(R.id.marcoNota).setBackgroundColor(Color.BLACK);
}
}
我知道这是一个非常具体的问题,但如果有人需要这样做的话。