Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中单击水平Listview项目时如何更改背景色_Android_Listview_Horizontallist - Fatal编程技术网

在Android中单击水平Listview项目时如何更改背景色

在Android中单击水平Listview项目时如何更改背景色,android,listview,horizontallist,Android,Listview,Horizontallist,在Android中单击水平Listview项目时如何更改背景色 以便用户知道他们单击的位置。 下面是我从某个网站上得到的代码 horizontalistViewActivity.java public class HorizontalListViewActivity extends Activity { static BitmapFactory bf; ArrayList<String> dataObjectsList = new ArrayList<String>()

在Android中单击水平Listview项目时如何更改背景色
以便用户知道他们单击的位置。
下面是我从某个网站上得到的代码

horizontalistViewActivity.java

public class HorizontalListViewActivity extends Activity {
static BitmapFactory bf;
 ArrayList<String> dataObjectsList = new ArrayList<String>();
 ArrayList<Bitmap> myImageList = new ArrayList<Bitmap>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    HorizontalListView listview = (HorizontalListView) findViewById(R.id.listview);
    listview.setAdapter(mAdapter);
    dataObjectsList.add("Text #1");
    dataObjectsList.add("Text #2");
    dataObjectsList.add("Text #3");
    dataObjectsList.add("Text #4");
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app1.jpg"));
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app2.jpg"));
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app3.jpg"));
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app4.jpg"));
    listview.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            /*Toast.makeText(getApplicationContext(), "dataObjects[position]=="+dataObjectsList.get(arg2).toString(), 100).show();
            Intent intent2 = new Intent(getApplicationContext(),Test.class);
            intent2.putExtra("category", dataObjectsList.get(arg2).toString());
            startActivity(intent2);*/
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

}

private static String[] dataObjects = new String[]{ "Delhi",
    "Bangalore",
    "Chennai",
    "Pune" }; 
private static Bitmap[] myImage = new Bitmap[]{ BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app1.jpg"),
    BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/City/app2.jpg"),
    BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/City/app3.jpg"),
    BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/City/app4.jpg") }; 


private BaseAdapter mAdapter = new BaseAdapter() {

    @Override
    public int getCount() {
        return dataObjects.length;
    }

    @Override
    public Object getItem(int position) {
        Toast.makeText(getApplicationContext(), "getItem 111111 position=="+position, 100).show();
        return null;
    }

    @Override
    public long getItemId(int position) {
        Toast.makeText(getApplicationContext(), "getItemId position=="+position, 100).show();
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View retval = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewitem, null);
        TextView title = (TextView) retval.findViewById(R.id.title);
        ImageView img=(ImageView) retval.findViewById(R.id.image);

        img.setImageBitmap(myImageList.get(position));
        title.setText(dataObjectsList.get(position).toString());
        return retval;
    }

};

}
public class HorizontalListView extends AdapterView<ListAdapter> {

public boolean mAlwaysOverrideTouch = true;
protected ListAdapter mAdapter;
private int mLeftViewIndex = -1;
private int mRightViewIndex = 0;
protected int mCurrentX;
protected int mNextX;
private int mMaxX = Integer.MAX_VALUE;
private int mDisplayOffset = 0;
protected Scroller mScroller;
private GestureDetector mGesture;
private Queue<View> mRemovedViewQueue = new LinkedList<View>();
private OnItemSelectedListener mOnItemSelected;
private OnItemClickListener mOnItemClicked;
private OnItemLongClickListener mOnItemLongClicked;
private boolean mDataChanged = false;


public HorizontalListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView();
}

private synchronized void initView() {
    mLeftViewIndex = -1;
    mRightViewIndex = 0;
    mDisplayOffset = 0;
    mCurrentX = 0;
    mNextX = 0;
    mMaxX = Integer.MAX_VALUE;
    mScroller = new Scroller(getContext());
    mGesture = new GestureDetector(getContext(), mOnGesture);
}

@Override
public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) {
    mOnItemSelected = listener;
}

@Override
public void setOnItemClickListener(AdapterView.OnItemClickListener listener){
    mOnItemClicked = listener;
}

@Override
public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener) {
    mOnItemLongClicked = listener;
}

private DataSetObserver mDataObserver = new DataSetObserver() {

    @Override
    public void onChanged() {
        synchronized(HorizontalListView.this){
            mDataChanged = true;
        }
        setEmptyView(getEmptyView());
        invalidate();
        requestLayout();
    }

    @Override
    public void onInvalidated() {
        reset();
        invalidate();
        requestLayout();
    }

};

@Override
public ListAdapter getAdapter() {
    return mAdapter;
}

@Override
public View getSelectedView() {
    //TODO: implement
    return null;
}

@Override
public void setAdapter(ListAdapter adapter) {
    if(mAdapter != null) {
        mAdapter.unregisterDataSetObserver(mDataObserver);
    }
    mAdapter = adapter;
    mAdapter.registerDataSetObserver(mDataObserver);
    reset();
}

private synchronized void reset(){
    initView();
    removeAllViewsInLayout();
    requestLayout();
}

@Override
public void setSelection(int position) {
    //TODO: implement
}

private void addAndMeasureChild(final View child, int viewPos) {
    LayoutParams params = child.getLayoutParams();
    if(params == null) {
        params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    }

    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) {
    super.onLayout(changed, left, top, right, bottom);

    if(mAdapter == null){
        return;
    }

    if(mDataChanged){
        int oldCurrentX = mCurrentX;
        initView();
        removeAllViewsInLayout();
        mNextX = oldCurrentX;
        mDataChanged = false;
    }

    if(mScroller.computeScrollOffset()){
        int scrollx = mScroller.getCurrX();
        mNextX = scrollx;
    }

    if(mNextX <= 0){
        mNextX = 0;
        mScroller.forceFinished(true);
    }
    if(mNextX >= mMaxX) {
        mNextX = mMaxX;
        mScroller.forceFinished(true);
    }

    int dx = mCurrentX - mNextX;

    removeNonVisibleItems(dx);
    fillList(dx);
    positionItems(dx);

    mCurrentX = mNextX;

    if(!mScroller.isFinished()){
        post(new Runnable(){
            @Override
            public void run() {
                requestLayout();
            }
        });

    }
}

private void fillList(final int dx) {
    int edge = 0;
    View child = getChildAt(getChildCount()-1);
    if(child != null) {
        edge = child.getRight();
    }
    fillListRight(edge, dx);

    edge = 0;
    child = getChildAt(0);
    if(child != null) {
        edge = child.getLeft();
    }
    fillListLeft(edge, dx);


}

private void fillListRight(int rightEdge, final int dx) {
    while(rightEdge + dx < getWidth() && mRightViewIndex < mAdapter.getCount()) {

        View child = mAdapter.getView(mRightViewIndex, mRemovedViewQueue.poll(), this);
        addAndMeasureChild(child, -1);
        rightEdge += child.getMeasuredWidth();

        if(mRightViewIndex == mAdapter.getCount()-1) {
            mMaxX = mCurrentX + rightEdge - getWidth();
        }

        if (mMaxX < 0) {
            mMaxX = 0;
        }
        mRightViewIndex++;
    }

}

private void fillListLeft(int leftEdge, final int dx) {
    while(leftEdge + dx > 0 && mLeftViewIndex >= 0) {
        View child = mAdapter.getView(mLeftViewIndex, mRemovedViewQueue.poll(), this);
        addAndMeasureChild(child, 0);
        leftEdge -= child.getMeasuredWidth();
        mLeftViewIndex--;
        mDisplayOffset -= child.getMeasuredWidth();
    }
}

private void removeNonVisibleItems(final int dx) {
    View child = getChildAt(0);
    while(child != null && child.getRight() + dx <= 0) {
        mDisplayOffset += child.getMeasuredWidth();
        mRemovedViewQueue.offer(child);
        removeViewInLayout(child);
        mLeftViewIndex++;
        child = getChildAt(0);

    }

    child = getChildAt(getChildCount()-1);
    while(child != null && child.getLeft() + dx >= getWidth()) {
        mRemovedViewQueue.offer(child);
        removeViewInLayout(child);
        mRightViewIndex--;
        child = getChildAt(getChildCount()-1);
    }
}

private void positionItems(final int dx) {
    if(getChildCount() > 0){
        mDisplayOffset += dx;
        int left = mDisplayOffset;
        for(int i=0;i<getChildCount();i++){
            View child = getChildAt(i);
            int childWidth = child.getMeasuredWidth();
            child.layout(left, 0, left + childWidth, child.getMeasuredHeight());
            left += childWidth;
        }
    }
}

public synchronized void scrollTo(int x) {
    mScroller.startScroll(mNextX, 0, x - mNextX, 0);
    requestLayout();
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    boolean handled = mGesture.onTouchEvent(ev);
    return handled;
}

protected boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
    synchronized(HorizontalListView.this){
        mScroller.fling(mNextX, 0, (int)-velocityX, 0, 0, mMaxX, 0, 0);
    }
    requestLayout();

    return true;
}

protected boolean onDown(MotionEvent e) {
    mScroller.forceFinished(true);
    return true;
}

private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {

    @Override
    public boolean onDown(MotionEvent e) {
        return HorizontalListView.this.onDown(e);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        return HorizontalListView.this.onFling(e1, e2, velocityX, velocityY);
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2,
            float distanceX, float distanceY) {

        getParent().requestDisallowInterceptTouchEvent(true);

        synchronized(HorizontalListView.this){
            mNextX += (int)distanceX;
        }
        requestLayout();

        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Rect viewRect = new Rect();
        for(int i=0;i<getChildCount();i++){
            View child = getChildAt(i);
            int left = child.getLeft();
            int right = child.getRight();
            int top = child.getTop();
            int bottom = child.getBottom();
            viewRect.set(left, top, right, bottom);
            if(viewRect.contains((int)e.getX(), (int)e.getY())){
                if(mOnItemClicked != null){
                    mOnItemClicked.onItemClick(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                }
                if(mOnItemSelected != null){
                    mOnItemSelected.onItemSelected(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                }
                break;
            }

        }
        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        Rect viewRect = new Rect();
        int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = getChildAt(i);
            int left = child.getLeft();
            int right = child.getRight();
            int top = child.getTop();
            int bottom = child.getBottom();
            viewRect.set(left, top, right, bottom);
            if (viewRect.contains((int) e.getX(), (int) e.getY())) {
                if (mOnItemLongClicked != null) {
                    mOnItemLongClicked.onItemLongClick(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId(mLeftViewIndex + 1 + i));
                }
                break;
            }

        }
    }

};

}
公共类HorizontalListViewActivity扩展活动{
静态位图;
ArrayList dataObjectsList=新的ArrayList();
ArrayList myImageList=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
HorizontalListView listview=(HorizontalListView)findViewById(R.id.listview);
setAdapter(mAdapter);
dataObjectsList.add(“Text#1”);
dataObjectsList.add(“Text#2”);
dataObjectsList.add(“Text#3”);
dataObjectsList.add(“Text#4”);
添加(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/restarent/app1.jpg”);
添加(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/restarent/app2.jpg”);
添加(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/restarent/app3.jpg”);
添加(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/restarent/app4.jpg”);
setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
/*Toast.makeText(getApplicationContext(),“dataObjects[position]=”+dataObjectsList.get(arg2).toString(),100.show();
Intent intent2=新意图(getApplicationContext(),Test.class);
intent2.putExtra(“category”,dataObjectsList.get(arg2.toString());
星触觉(intent2)*/
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
}
私有静态字符串[]数据对象=新字符串[]{“德里”,
“班加罗尔”,
“钦奈”,
“普纳”};
私有静态位图[]myImage=新位图[]{BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/restarent/app1.jpg”),
BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/City/app2.jpg”),
BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/City/app3.jpg”),
BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+“/City/app4.jpg”);
专用BaseAdapter mAdapter=新BaseAdapter(){
@凌驾
public int getCount(){
返回dataObjects.length;
}
@凌驾
公共对象getItem(int位置){
Toast.makeText(getApplicationContext(),“getItem111111 position==”+position,100.show();
返回null;
}
@凌驾
公共长getItemId(int位置){
makeText(getApplicationContext(),“getItemId位置==”+位置,100).show();
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
View retval=LayoutInflater.from(parent.getContext()).flate(R.layout.viewitem,null);
TextView title=(TextView)retval.findViewById(R.id.title);
ImageView img=(ImageView)retval.findViewById(R.id.image);
setImageBitmap(myImageList.get(position));
title.setText(dataObjectsList.get(position.toString());
返回返回;
}
};
}
horizontalistView.java

public class HorizontalListViewActivity extends Activity {
static BitmapFactory bf;
 ArrayList<String> dataObjectsList = new ArrayList<String>();
 ArrayList<Bitmap> myImageList = new ArrayList<Bitmap>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    HorizontalListView listview = (HorizontalListView) findViewById(R.id.listview);
    listview.setAdapter(mAdapter);
    dataObjectsList.add("Text #1");
    dataObjectsList.add("Text #2");
    dataObjectsList.add("Text #3");
    dataObjectsList.add("Text #4");
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app1.jpg"));
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app2.jpg"));
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app3.jpg"));
    myImageList.add(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app4.jpg"));
    listview.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            /*Toast.makeText(getApplicationContext(), "dataObjects[position]=="+dataObjectsList.get(arg2).toString(), 100).show();
            Intent intent2 = new Intent(getApplicationContext(),Test.class);
            intent2.putExtra("category", dataObjectsList.get(arg2).toString());
            startActivity(intent2);*/
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

}

private static String[] dataObjects = new String[]{ "Delhi",
    "Bangalore",
    "Chennai",
    "Pune" }; 
private static Bitmap[] myImage = new Bitmap[]{ BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app1.jpg"),
    BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/City/app2.jpg"),
    BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/City/app3.jpg"),
    BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/City/app4.jpg") }; 


private BaseAdapter mAdapter = new BaseAdapter() {

    @Override
    public int getCount() {
        return dataObjects.length;
    }

    @Override
    public Object getItem(int position) {
        Toast.makeText(getApplicationContext(), "getItem 111111 position=="+position, 100).show();
        return null;
    }

    @Override
    public long getItemId(int position) {
        Toast.makeText(getApplicationContext(), "getItemId position=="+position, 100).show();
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View retval = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewitem, null);
        TextView title = (TextView) retval.findViewById(R.id.title);
        ImageView img=(ImageView) retval.findViewById(R.id.image);

        img.setImageBitmap(myImageList.get(position));
        title.setText(dataObjectsList.get(position).toString());
        return retval;
    }

};

}
public class HorizontalListView extends AdapterView<ListAdapter> {

public boolean mAlwaysOverrideTouch = true;
protected ListAdapter mAdapter;
private int mLeftViewIndex = -1;
private int mRightViewIndex = 0;
protected int mCurrentX;
protected int mNextX;
private int mMaxX = Integer.MAX_VALUE;
private int mDisplayOffset = 0;
protected Scroller mScroller;
private GestureDetector mGesture;
private Queue<View> mRemovedViewQueue = new LinkedList<View>();
private OnItemSelectedListener mOnItemSelected;
private OnItemClickListener mOnItemClicked;
private OnItemLongClickListener mOnItemLongClicked;
private boolean mDataChanged = false;


public HorizontalListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView();
}

private synchronized void initView() {
    mLeftViewIndex = -1;
    mRightViewIndex = 0;
    mDisplayOffset = 0;
    mCurrentX = 0;
    mNextX = 0;
    mMaxX = Integer.MAX_VALUE;
    mScroller = new Scroller(getContext());
    mGesture = new GestureDetector(getContext(), mOnGesture);
}

@Override
public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) {
    mOnItemSelected = listener;
}

@Override
public void setOnItemClickListener(AdapterView.OnItemClickListener listener){
    mOnItemClicked = listener;
}

@Override
public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener) {
    mOnItemLongClicked = listener;
}

private DataSetObserver mDataObserver = new DataSetObserver() {

    @Override
    public void onChanged() {
        synchronized(HorizontalListView.this){
            mDataChanged = true;
        }
        setEmptyView(getEmptyView());
        invalidate();
        requestLayout();
    }

    @Override
    public void onInvalidated() {
        reset();
        invalidate();
        requestLayout();
    }

};

@Override
public ListAdapter getAdapter() {
    return mAdapter;
}

@Override
public View getSelectedView() {
    //TODO: implement
    return null;
}

@Override
public void setAdapter(ListAdapter adapter) {
    if(mAdapter != null) {
        mAdapter.unregisterDataSetObserver(mDataObserver);
    }
    mAdapter = adapter;
    mAdapter.registerDataSetObserver(mDataObserver);
    reset();
}

private synchronized void reset(){
    initView();
    removeAllViewsInLayout();
    requestLayout();
}

@Override
public void setSelection(int position) {
    //TODO: implement
}

private void addAndMeasureChild(final View child, int viewPos) {
    LayoutParams params = child.getLayoutParams();
    if(params == null) {
        params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    }

    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) {
    super.onLayout(changed, left, top, right, bottom);

    if(mAdapter == null){
        return;
    }

    if(mDataChanged){
        int oldCurrentX = mCurrentX;
        initView();
        removeAllViewsInLayout();
        mNextX = oldCurrentX;
        mDataChanged = false;
    }

    if(mScroller.computeScrollOffset()){
        int scrollx = mScroller.getCurrX();
        mNextX = scrollx;
    }

    if(mNextX <= 0){
        mNextX = 0;
        mScroller.forceFinished(true);
    }
    if(mNextX >= mMaxX) {
        mNextX = mMaxX;
        mScroller.forceFinished(true);
    }

    int dx = mCurrentX - mNextX;

    removeNonVisibleItems(dx);
    fillList(dx);
    positionItems(dx);

    mCurrentX = mNextX;

    if(!mScroller.isFinished()){
        post(new Runnable(){
            @Override
            public void run() {
                requestLayout();
            }
        });

    }
}

private void fillList(final int dx) {
    int edge = 0;
    View child = getChildAt(getChildCount()-1);
    if(child != null) {
        edge = child.getRight();
    }
    fillListRight(edge, dx);

    edge = 0;
    child = getChildAt(0);
    if(child != null) {
        edge = child.getLeft();
    }
    fillListLeft(edge, dx);


}

private void fillListRight(int rightEdge, final int dx) {
    while(rightEdge + dx < getWidth() && mRightViewIndex < mAdapter.getCount()) {

        View child = mAdapter.getView(mRightViewIndex, mRemovedViewQueue.poll(), this);
        addAndMeasureChild(child, -1);
        rightEdge += child.getMeasuredWidth();

        if(mRightViewIndex == mAdapter.getCount()-1) {
            mMaxX = mCurrentX + rightEdge - getWidth();
        }

        if (mMaxX < 0) {
            mMaxX = 0;
        }
        mRightViewIndex++;
    }

}

private void fillListLeft(int leftEdge, final int dx) {
    while(leftEdge + dx > 0 && mLeftViewIndex >= 0) {
        View child = mAdapter.getView(mLeftViewIndex, mRemovedViewQueue.poll(), this);
        addAndMeasureChild(child, 0);
        leftEdge -= child.getMeasuredWidth();
        mLeftViewIndex--;
        mDisplayOffset -= child.getMeasuredWidth();
    }
}

private void removeNonVisibleItems(final int dx) {
    View child = getChildAt(0);
    while(child != null && child.getRight() + dx <= 0) {
        mDisplayOffset += child.getMeasuredWidth();
        mRemovedViewQueue.offer(child);
        removeViewInLayout(child);
        mLeftViewIndex++;
        child = getChildAt(0);

    }

    child = getChildAt(getChildCount()-1);
    while(child != null && child.getLeft() + dx >= getWidth()) {
        mRemovedViewQueue.offer(child);
        removeViewInLayout(child);
        mRightViewIndex--;
        child = getChildAt(getChildCount()-1);
    }
}

private void positionItems(final int dx) {
    if(getChildCount() > 0){
        mDisplayOffset += dx;
        int left = mDisplayOffset;
        for(int i=0;i<getChildCount();i++){
            View child = getChildAt(i);
            int childWidth = child.getMeasuredWidth();
            child.layout(left, 0, left + childWidth, child.getMeasuredHeight());
            left += childWidth;
        }
    }
}

public synchronized void scrollTo(int x) {
    mScroller.startScroll(mNextX, 0, x - mNextX, 0);
    requestLayout();
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    boolean handled = mGesture.onTouchEvent(ev);
    return handled;
}

protected boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
    synchronized(HorizontalListView.this){
        mScroller.fling(mNextX, 0, (int)-velocityX, 0, 0, mMaxX, 0, 0);
    }
    requestLayout();

    return true;
}

protected boolean onDown(MotionEvent e) {
    mScroller.forceFinished(true);
    return true;
}

private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {

    @Override
    public boolean onDown(MotionEvent e) {
        return HorizontalListView.this.onDown(e);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        return HorizontalListView.this.onFling(e1, e2, velocityX, velocityY);
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2,
            float distanceX, float distanceY) {

        getParent().requestDisallowInterceptTouchEvent(true);

        synchronized(HorizontalListView.this){
            mNextX += (int)distanceX;
        }
        requestLayout();

        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Rect viewRect = new Rect();
        for(int i=0;i<getChildCount();i++){
            View child = getChildAt(i);
            int left = child.getLeft();
            int right = child.getRight();
            int top = child.getTop();
            int bottom = child.getBottom();
            viewRect.set(left, top, right, bottom);
            if(viewRect.contains((int)e.getX(), (int)e.getY())){
                if(mOnItemClicked != null){
                    mOnItemClicked.onItemClick(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                }
                if(mOnItemSelected != null){
                    mOnItemSelected.onItemSelected(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                }
                break;
            }

        }
        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        Rect viewRect = new Rect();
        int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = getChildAt(i);
            int left = child.getLeft();
            int right = child.getRight();
            int top = child.getTop();
            int bottom = child.getBottom();
            viewRect.set(left, top, right, bottom);
            if (viewRect.contains((int) e.getX(), (int) e.getY())) {
                if (mOnItemLongClicked != null) {
                    mOnItemLongClicked.onItemLongClick(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId(mLeftViewIndex + 1 + i));
                }
                break;
            }

        }
    }

};

}
公共类HorizontalListView扩展了AdapterView{
公共布尔值mAlwaysOverrideTouch=true;
保护列表适配器mAdapter;
private int mLeftViewIndex=-1;
private int mRightViewIndex=0;
受保护的int-mCurrentX;
受保护的int mNextX;
private int mMaxX=Integer.MAX_值;
私有整数mDisplayOffset=0;
保护滚轮;
私人手势;
私有队列mRemovedViewQueue=新链接列表();
private OnItemSelectedListener监视项Selected;
私有监听监听监听项被点击;
私有OnItemLongClickListener监视器LongClicked;
私有布尔值mDataChanged=false;
公共水平列表视图(上下文、属性集属性){
超级(上下文,attrs);
initView();
}
私有同步void initView(){
mLeftViewIndex=-1;
mRightViewIndex=0;
mDisplayOffset=0;
mCurrentX=0;
mNextX=0;
mMaxX=整数的最大值;
mScroller=新滚动条(getContext());
mGesture=新的手势检测器(getContext(),mOnGesture);
}
@凌驾
公共无效setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener){
mOnItemSelected=侦听器;
}
@凌驾
public void setOnItemClickListener(AdapterView.OnItemClickListener侦听器){
mOnItemClicked=侦听器;
}
@凌驾
public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener侦听器){
mOnItemLongClicked=listener;
}
私有DataSetoObserver mDataObserver=新DataSetoObserver(){
@凌驾
更改后的公共无效(){
已同步(HorizontalListView.this){
mDataChanged=true;
}
setEmptyView(getEmptyView());
使无效();
requestLayout();
}
@凌驾
未验证的公共无效(){
重置();
使无效();
requestLayout();
}
};
@凌驾
公共ListAdapter getAdapter(){
返回mAdapter;
}
@凌驾
公共视图getSelectedView(){
//TODO:实现
返回null;
}
@凌驾
public void setAdapter(ListAdapter适配器){
如果(mAdapter!=null){
mAdapter.unregisteredatasetobserver(mDataObserver);
}
mAdapter=适配器;
mAdapter.registerDataSetObserver(mDataObserver);
重置();
}
私有同步无效重置(){
initView();
removeAllViewsInLayout();
要求
public View selectedRow;//declare this in class
if (selectedRow != null) {
    selectedRow.setBackgroundResource(color.transparent);                   
}
selectedRow = view; //view is the onitemSelectListner View
view.setBackgroundResource(R.drawable.list_background); 
list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                for(int j=0;j<20;j++)
                {
                    test[j]=0;
                }


                for (int k = 0; k < mAdapter.getCount(); k++) {
                    View item = list.getChildAt(k);
                    if (item != null) {
                        test[k]=0;
                        item.setBackgroundColor(Color.WHITE);
                    }
                    view.setBackgroundColor(Color.BLUE);
                    test[i]=1;

                }
            }
   if (test[position]==1) {             
            relativeLayout.setBackgroundColor(Color.BLUE);
        }
        if(test[position]==0)
            relativeLayout.setBackgroundColor(Color.WHITE);