如何在改变的backgroung颜色点击在Android的水平列表视图项目 [英] How to change backgroung color when click on Horizontal Listview items in Android
本文介绍了如何在改变的backgroung颜色点击在Android的水平列表视图项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在Android中
水平列表视图项目时,点击更改背景颜色
这样用户就会知道他们点击。
下面是我的一些互联网网站得到了code。
HorizontalListViewActivity.java
公共类HorizontalListViewActivity延伸活动{
静态BitmapFactory BF;
ArrayList的<字符串> dataObjectsList =新的ArrayList<字符串>();
ArrayList的<位图> myImageList =新的ArrayList<位图>();
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
HorizontalListView列表视图=(HorizontalListView)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();
意图intent2 =新的意图(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;
}
};
}
HorizontalListView.java
公共类HorizontalListView扩展适配器视图< 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;
私人布尔mDataChanged = FALSE;
公共HorizontalListView(上下文的背景下,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(){
同步(HorizontalListView.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){
同步(HorizontalListView.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){
返回HorizontalListView.this.onDown(E);
}
@覆盖
公共布尔onFling(MotionEvent E1,E2 MotionEvent,浮velocityX,
浮动velocityY){
返回HorizontalListView.this.onFling(E1,E2,velocityX,velocityY);
}
@覆盖
公共布尔onScroll(MotionEvent E1,E2 MotionEvent,
浮distanceX,浮distanceY){
。的getParent()requestDisallowInterceptTouchEvent(真正的);
同步(HorizontalListView.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(HorizontalListView.this,儿童,mLeftViewIndex + 1 + I,mAdapter.getItemId(mLeftViewIndex + 1 + I));
}
如果(mOnItemSelected!= NULL){
mOnItemSelected.onItemSelected(HorizontalListView.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(HorizontalListView.this,儿童,mLeftViewIndex + 1 + I,mAdapter.getItemId(mLeftViewIndex + 1 + I));
}
打破;
}
}
}
};
}
viewitem.xml
< XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
的xmlns:机器人=http://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_horizontal
/>
< / LinearLayout中>
的main.xml
< XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:后台=#FFF
机器人:方向=垂直>
< com.horilistview.HorizontalListView
机器人: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..
这篇关于如何在改变的backgroung颜色点击在Android的水平列表视图项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文