我为我的listView有一个自定义适配器集。我还设置了选择项目时出现的默认项目选择波动动画(android:background="?android:selectableItemBackground"
(。但是,当我点击文本视图时,动画不会出现。这是一个视频。
我尝试的是无济于事:
- 设置父linearlayout的descendantFocusability =" blocksdescendants"
- 添加Clickable&focusable =" false" totsviews
这是我的list_item.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:background="?android:selectableItemBackground"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1" />
</LinearLayout>
(编辑(和在适配器类中的getView()
方法中,我在return convertView
之前有这些:
holder.title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick()
}
});
holder.text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick()
}
});
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
...要在MainActivity
中允许onItemClick
(如果我按文本或线性布局,它将打开同一件事(。
我对您的问题有一个解决方案:在您的getView((中尝试一下:
final RippleDrawable rippleDrawable = (RippleDrawable) convertView.getBackground();
final View finalParent = parent;
final int finalPosition = position;
View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
rippleDrawable.setHotspot(motionEvent.getX(), motionEvent.getY());
rippleDrawable.setState(new int[] {android.R.attr.state_pressed, android.R.attr.state_enabled});
return true;
case MotionEvent.ACTION_UP:
rippleDrawable.setState(new int[0]);
((ListView)finalParent).performItemClick(view, finalPosition, 0);
return true;
}
return false;
}
};
第一行获取列表视图项目的可旋转曲线。
触摸文本视图时,您可以获得触摸的坐标,并将它们设置为与Sethotspot的连锁反应,以指定波纹效果的起点。
之后,您通过设置一个int rand and android.r.attr.state_pressed和android.r.attr.state_enabled来触发涟漪效应,使用setState((。
触摸结束时,将状态设置为空的int数组,停止纹波。
它应该起作用!