- list显示效果如图,list item分左右两个部分,左边部分按下会变色,右边部分点击无效果。一些item只有左边部分
-
list item布局如下,左右部分都为ImageView实现
- 一个item包括左右两个ImageView,无图预览:
- 左边部分想通过ImageButton显示,但没找到在list中如何监听左边ImageButton的方法。只能监听整个item(刚学习Android没多久。。)在item右边没有ImageView的情况下,点击item右侧空白区域,左侧也会有按下变色。通过判断右侧按下的x坐标(程序中为大于525)时,在OnTouch中返回true,就可以实现点击item右侧而左侧没有按下变色。过程中发现,如果只监听OnTouch,item设置为ImageView,按下不会变色。只监听OnClick就得不到按下的x坐标,所以两个都进行了监听。
- item的布局代码
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="711px" android:layout_height="54px" tools:ignore="MissingPrefix" > <ImageView android:id="@+id/list_item_leftpart" android:layout_width="528px" android:layout_height="54px" android:layout_marginLeft="0px" android:layout_marginTop="0px" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:id="@+id/list_item_rightpart" android:layout_width="184px" android:layout_height="54px" android:layout_marginLeft="527px" android:layout_marginTop="0px" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
- RecyclerView实现list,Adapter中的
onBindViewHolder函数如下:
public void onBindViewHolder(VH holder, final int position) { /*設置為不複用,對應圖片錯亂問題*/ holder.setIsRecyclable(false); holder.list_left.setImageResource(mDatas[position]); LogPrint.i(TAG,"left " + (position + 1)); if(mDatas[position + 12] != 0) { holder.list_right.setImageResource(mDatas[position + 12]); } /*如果不監聽OnClick,只監聽OnTouch會有ImageView押下不變色问题*/ holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); holder.itemView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { /*點右側區域按鍵不變色*/ if(event.getX() > 525) { LogPrint.i(TAG,"Touch out of range."); return true; } /*item 点击事件*/ if(event.getAction() == MotionEvent.ACTION_UP) { switch (position) { case 0: break; case 1: break; case 2: break; case 3: break; } } return false; } }); }
- item按下变色对应xml代码
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/menu_lay3_setup_nor_language_03"/> <item android:state_pressed="true" android:drawable="@drawable/menu_lay3_setup_nor_language_02"/> <item android:state_enabled="false" android:drawable="@drawable/menu_lay3_setup_nor_language_04"/> <item android:drawable="@drawable/menu_lay3_setup_nor_language_01"/> </selector>
- 仅作为个人学习记录。