如何在改变的backgroung颜色点击在Android的水平列表视图项目视图、颜色、水平、项目

2023-09-06 04:12:32 作者:奈酒

如何在Android中水平列表视图项目时,点击更改背景颜色 这样用户就会知道他们点击。 下面是我的一些互联网网站得到了code。

Horizo​​ntalListViewActivity.java

 公共类Horizo​​ntalListViewActivity延伸活动{
静态BitmapFactory BF;
 ArrayList的<字符串> dataObjectsList =新的ArrayList<字符串>();
 ArrayList的<位图> myImageList =新的ArrayList<位图>();
@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    的setContentView(R.layout.main);

    Horizo​​ntalListView列表视图=(Horizo​​ntalListView)findViewById(R.id.listview);
    listview.setAdapter(mAdapter);
    dataObjectsList.add(文本#1);
    dataObjectsList.add(文本#2);
    dataObjectsList.add(文本#3);
    dataObjectsList.add(文本#4);
    myImageList.add(BitmapFactory.de$c$cFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app1.jpg"));
    myImageList.add(BitmapFactory.de$c$cFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app2.jpg"));
    myImageList.add(BitmapFactory.de$c$cFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app3.jpg"));
    myImageList.add(BitmapFactory.de$c$cFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app4.jpg"));
    listview.setOnItemSelectedListener(新OnItemSelectedListener(){

        @覆盖
        公共无效onItemSelected(适配器视图<>为arg0,查看ARG1,
                INT ARG2,长ARG3){
            // TODO自动生成方法存根
            /*Toast.makeText(getApplicationContext(),数据对象[位置] ==+ dataObjectsList.get(ARG2)的ToString(),100).show();
            意图int​​ent2 =新的意图(getApplicationContext(),Test.class);
            intent2.putExtra(类别,dataObjectsList.get(ARG2)的ToString());
            startActivity(intent2); * /
        }

        @覆盖
        公共无效onNothingSelected(适配器视图<>为arg0){
            // TODO自动生成方法存根

        }
    });

}

私有静态的String []数据对象=新的String [] {德里
    班加罗尔,
    奈,
    普纳};
私有静态位图[] MYIMAGE =新位图[] { BitmapFactory.de$c$cFile(Environment.getExternalStorageDirectory().getPath()+"/Restaurent/app1.jpg"),
    BitmapFactory.de codeFILE(Environment.getExternalStorageDirectory()。getPath()+/城市/ app2.jpg),
    BitmapFactory.de codeFILE(Environment.getExternalStorageDirectory()。getPath()+/城市/ app3.jpg),
    BitmapFactory.de codeFILE(Environment.getExternalStorageDirectory()getPath()+/城市/ app4.jpg。)};


私人BaseAdapter mAdapter =新BaseAdapter(){

    @覆盖
    公众诠释getCount将(){
        返回dataObjects.length;
    }

    @覆盖
    公共对象的getItem(INT位置){
        Toast.makeText(getApplicationContext()的getItem 111111位置==+位置,100).show();
        返回null;
    }

    @覆盖
    众长getItemId(INT位置){
        Toast.makeText(getApplicationContext(),getItemId位置==+位置,100).show();
        返回0;
    }

    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        查看RETVAL = LayoutInflater.from(parent.getContext())膨胀(R.layout.viewitem,空)。
        TextView的标题=(TextView中)retval.findViewById(R.id.title);
        ImageView的IMG =(ImageView的)retval.findViewById(R.id.image);

        img.setImageBitmap(myImageList.get(位置));
        title.setText(dataObjectsList.get(位置)的ToString());
        返回RETVAL;
    }

};

}
 

Horizo​​ntalListView.java

 公共类Horizo​​ntalListView扩展适配器视图< ListAdapter> {

公共布尔mAlwaysOverrideTouch = TRUE;
保护ListAdapter mAdapter;
私人诠释mLeftViewIndex = -1;
私人诠释mRightViewIndex = 0;
保护INT mCurrentX;
保护INT mNextX;
私人诠释mMaxX = Integer.MAX_VALUE的;
私人诠释mDisplayOffset = 0;
保护滚轮mScroller;
私人GestureDetector mGesture;
专用队列和LT;视图> mRemovedViewQueue =新的LinkedList<视图>();
私人OnItemSelectedListener mOnItemSelected;
私人OnItemClickListener mOnItemClicked;
私人OnItemLongClickListener mOnItemLongClicked;
私人布尔mD​​ataChanged = FALSE;


公共Horizo​​ntalListView(上下文的背景下,ATTRS的AttributeSet){
    超(背景下,ATTRS);
    initView();
}

私人同步无效initView(){
    mLeftViewIndex = -1;
    mRightViewIndex = 0;
    mDisplayOffset = 0;
    mCurrentX = 0;
    mNextX = 0;
    mMaxX = Integer.MAX_VALUE的;
    mScroller =新的滚轮(的getContext());
    mGesture =新GestureDetector(的getContext(),mOnGesture);
}

@覆盖
公共无效setOnItemSelectedListener(AdapterView.OnItemSelectedListener监听器){
    mOnItemSelected =侦听器;
}

@覆盖
公共无效setOnItemClickListener(AdapterView.OnItemClickListener监听器){
    mOnItemClicked =侦听器;
}

@覆盖
公共无效setOnItemLongClickListener(AdapterView.OnItemLongClickListener监听器){
    mOnItemLongClicked =侦听器;
}

私人DataSetObserver mDataObserver =新DataSetObserver(){

    @覆盖
    公共无效调用onChanged(){
        同步(Horizo​​ntalListView.this){
            mDataChanged = TRUE;
        }
        setEmptyView(getEmptyView());
        无效();
        requestLayout();
    }

    @覆盖
    公共无效onInvalidated(){
        复位();
        无效();
        requestLayout();
    }

};

@覆盖
公共ListAdapter getAdapter(){
    返回mAdapter;
}

@覆盖
公共查看getSelectedView(){
    // TODO:实施
    返回null;
}

@覆盖
公共无效setAdapter(ListAdapter适配器){
    如果(mAdapter!= NULL){
        mAdapter.unregisterDataSetObserver(mDataObserver);
    }
    mAdapter =适配器;
    mAdapter.registerDataSetObserver(mDataObserver);
    复位();
}

私人同步无效复位(){
    initView();
    removeAllViewsInLayout();
    requestLayout();
}

@覆盖
公共无效setSelection(INT位置){
    // TODO:实施
}

私人无效addAndMeasureChild(最后查看的孩子,诠释viewPos){
    的LayoutParams PARAMS = child.getLayoutParams();
    如果(PARAMS == NULL){
        PARAMS =新的LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
    }

    addViewInLayout(孩子,viewPos,参数,可以真正的);
    child.measure(MeasureSpec.makeMeasureSpec(的getWidth(),MeasureSpec.AT_MOST),
            MeasureSpec.makeMeasureSpec(的getHeight(),MeasureSpec.AT_MOST));
}

@覆盖
保护同步无效onLayout(布尔改变,诠释离开,INT顶部,诠释权,诠释底部){
    super.onLayout(改,左,上,右,下);

    如果(mAdapter == NULL){
        返回;
    }

    如果(mDataChanged){
        INT oldCurrentX = mCurrentX;
        initView();
        removeAllViewsInLayout();
        mNextX = oldCurrentX;
        mDataChanged = FALSE;
    }

    如果(mScroller.computeScrollOffset()){
        INT scrollx = mScroller.getCurrX();
        mNextX = scrollx;
    }

    如果(mNextX&所述; = 0){
        mNextX = 0;
        mScroller.forceFinished(真正的);
    }
    如果(mNextX> = mMaxX){
        mNextX = mMaxX;
        mScroller.forceFinished(真正的);
    }

    INT DX = mCurrentX  -  mNextX;

    removeNonVisibleItems(DX);
    fillList(DX);
    positionItems(DX);

    mCurrentX = mNextX;

    如果(!mScroller.isFinished()){
        交(新的Runnable(){
            @覆盖
            公共无效的run(){
                requestLayout();
            }
        });

    }
}

私人无效fillList(最终诠释DX){
    INT边缘= 0;
    查看孩子= getChildAt(getChildCount() -  1);
    如果(孩子!= NULL){
        边= child.getRight();
    }
    fillListRight(边,DX);

    边= 0;
    子= getChildAt(0);
    如果(孩子!= NULL){
        边= child.getLeft();
    }
    fillListLeft(边,DX);


}

私人无效fillListRight(INT rightEdge,最终诠释DX){
    而(rightEdge + DX&其中;的getWidth()&安培;&安培; mRightViewIndex&其中; mAdapter.getCount()){

        查看孩子= mAdapter.getView(mRightViewIndex,mRemovedViewQueue.poll(),这一点);
        addAndMeasureChild(儿童,-1);
        rightEdge + = child.getMeasuredWidth();

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

        如果(mMaxX℃,){
            mMaxX = 0;
        }
        mRightViewIndex ++;
    }

}

私人无效fillListLeft(INT leftEdge,最终诠释DX){
    而(leftEdge + DX大于0&安培;&安培; mLeftViewIndex> = 0){
        查看孩子= mAdapter.getView(mLeftViewIndex,mRemovedViewQueue.poll(),这一点);
        addAndMeasureChild(子,0);
        leftEdge  -  = child.getMeasuredWidth();
        mLeftViewIndex--;
        mDisplayOffset  -  = child.getMeasuredWidth();
    }
}

私人无效removeNonVisibleItems(最终​​诠释DX){
    查看孩子= getChildAt(0);
    而(子= NULL和放大器;!&安培; child.getRight()+ DX< = 0){
        mDisplayOffset + = child.getMeasuredWidth();
        mRemovedViewQueue.offer(子);
        removeViewInLayout(子);
        mLeftViewIndex ++;
        子= getChildAt(0);

    }

    孩子= getChildAt(getChildCount() -  1);
    而(子= NULL和放大器;!&安培; child.getLeft()+ DX> =的getWidth()){
        mRemovedViewQueue.offer(子);
        removeViewInLayout(子);
        mRightViewIndex--;
        孩子= getChildAt(getChildCount() -  1);
    }
}

私人无效positionItems(最终​​诠释DX){
    如果(getChildCount()大于0){
        mDisplayOffset + = DX;
        INT左= mDisplayOffset;
        的for(int i = 0; I< getChildCount();我++){
            查看孩子= getChildAt(我);
            INT childWidth = child.getMeasuredWidth();
            child.layout(左,0,左+ childWidth,child.getMeasuredHeight());
            左+ = childWidth;
        }
    }
}

市民同步无效scrollTo(INT X){
    mScroller.startScroll(mNextX,0,X  -  mNextX,0);
    requestLayout();
}

@覆盖
公共布尔dispatchTouchEvent(MotionEvent EV){
    布尔处理= mGesture.onTouchEvent(EV);
    返回处理;
}

保护布尔onFling(MotionEvent E1,E2 MotionEvent,浮velocityX,
            浮动velocityY){
    同步(Horizo​​ntalListView.this){
        mScroller.fling(mNextX,0,(int)的-velocityX,0,0,mMaxX,0,0);
    }
    requestLayout();

    返回true;
}

保护布尔onDown(MotionEvent E){
    mScroller.forceFinished(真正的);
    返回true;
}

私人OnGestureListener mOnGesture =新GestureDetector.SimpleOnGestureListener(){

    @覆盖
    公共布尔onDown(MotionEvent E){
        返回Horizo​​ntalListView.this.onDown(E);
    }

    @覆盖
    公共布尔onFling(MotionEvent E1,E2 MotionEvent,浮velocityX,
            浮动velocityY){
        返回Horizo​​ntalListView.this.onFling(E1,E2,velocityX,velocityY);
    }

    @覆盖
    公共布尔onScroll(MotionEvent E1,E2 MotionEvent,
            浮distanceX,浮distanceY){

        。的getParent()requestDisallowInterceptTouchEvent(真正的);

        同步(Horizo​​ntalListView.this){
            mNextX + =(INT)distanceX;
        }
        requestLayout();

        返回true;
    }

    @覆盖
    公共布尔onSingleTapConfirmed(MotionEvent E){
        矩形viewRect =新的矩形();
        的for(int i = 0; I< getChildCount();我++){
            查看孩子= getChildAt(我);
            INT左= child.getLeft();
            INT右= child.getRight();
            INT顶= child.getTop();
            INT底部= child.getBottom();
            viewRect.set(左,上,右,下);
            如果(viewRect.contains((int)的e.getX(),(int)的e.getY())){
                如果(mOnItemClicked!= NULL){
                    mOnItemClicked.onItemClick(Horizo​​ntalListView.this,儿童,mLeftViewIndex + 1 + I,mAdapter.getItemId(mLeftViewIndex + 1 + I));
                }
                如果(mOnItemSelected!= NULL){
                    mOnItemSelected.onItemSelected(Horizo​​ntalListView.this,儿童,mLeftViewIndex + 1 + I,mAdapter.getItemId(mLeftViewIndex + 1 + I));
                }
                打破;
            }

        }
        返回true;
    }

    @覆盖
    公共无效onLong preSS(MotionEvent E){
        矩形viewRect =新的矩形();
        INT childCount = getChildCount();
        的for(int i = 0; I< childCount;我++){
            查看孩子= getChildAt(我);
            INT左= child.getLeft();
            INT右= child.getRight();
            INT顶= child.getTop();
            INT底部= child.getBottom();
            viewRect.set(左,上,右,下);
            如果(viewRect.contains((int)的e.getX(),(int)的e.getY())){
                如果(mOnItemLongClicked!= NULL){
                    mOnItemLongClicked.onItemLongClick(Horizo​​ntalListView.this,儿童,mLeftViewIndex + 1 + I,mAdapter.getItemId(mLeftViewIndex + 1 + I));
                }
                打破;
            }

        }
    }

};

}
 

viewitem.xml

 < XML版本=1.0编码=UTF-8&GT?;
    <的LinearLayout
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:方向=垂直
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:后台=#FFF>

   < ImageView的
      机器人:ID =@ + ID /图像
      机器人:layout_width =145dp
      机器人:layout_height =145dp
      机器人:layout_marginTop =5DP
      机器人:scaleType =centerCrop
      机器人:SRC =@可绘制/ ic_launcher
      />

      <的TextView
      机器人:ID =@ + ID /标题
      机器人:layout_width =FILL_PARENT
      机器人:layout_height =WRAP_CONTENT
      机器人:文字颜色=#000
      机器人:文本=文本
      机器人:重力=center_horizo​​ntal
      />

    < / LinearLayout中>
 
改变Android按钮背景颜色的高效方法

的main.xml

 < XML版本=1.0编码=UTF-8&GT?;
   < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:后台=#FFF
    机器人:方向=垂直>

    < com.horilistview.Horizo​​ntalListView
        机器人:ID =@ + ID /列表视图
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
        机器人:后台=#DDD/>

    < / LinearLayout中>
 

解决方案

 公开查看selectedRow; //在类中声明这
 

将此code。在 onitemSelectListner

 如果(selectedRow!= NULL){
    selectedRow.setBackgroundResource(color.transparent);
}
selectedRow =图。 //观点是onitemSelectListner查看
view.setBackgroundResource(R.drawable.list_background);
 

这将工作3.0及以上版本。

How to change background color when clicking on Horizontal Listview items in Android So that users will know where they clicked. Below is the code which I got from some internet site.

HorizontalListViewActivity.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;
    }

};

}

HorizontalListView.java

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;
            }

        }
    }

};

}

viewitem.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#fff">

   <ImageView
      android:id="@+id/image"
      android:layout_width="145dp"
      android:layout_height="145dp"
      android:layout_marginTop="5dp"
      android:scaleType="centerCrop"
      android:src="@drawable/ic_launcher"
      />

      <TextView
      android:id="@+id/title"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:textColor="#000"
      android:text="text"
      android:gravity="center_horizontal"
      />

    </LinearLayout>

main.xml

   <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#fff"
    android:orientation="vertical" >

    <com.horilistview.HorizontalListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ddd" />

    </LinearLayout>

解决方案

public View selectedRow;//declare this in class

Add this code in onitemSelectListner

if (selectedRow != null) {
    selectedRow.setBackgroundResource(color.transparent);                   
}
selectedRow = view; //view is the onitemSelectListner View
view.setBackgroundResource(R.drawable.list_background); 

this will work 3.0 and above version..