Java ListView项目的涟漪动画赢得';单击包含文本视图时无法工作

Java ListView项目的涟漪动画赢得';单击包含文本视图时无法工作,java,android,listview,rippledrawable,Java,Android,Listview,Rippledrawable,我为我的ListView设置了一个自定义适配器。我还将默认项目选择涟漪动画设置为在选择项目时显示(android:background=“?android:selectableitemcondground”)。 但是,当我点击文本视图时,动画不会出现 我所做的一切都没有用: 设置父LinearLayout的后代Focusability=“BlocksDescents” 添加可点击的& 对文本视图设置focusable=“false” 以下是我的列表_item.xml: <LinearL

我为我的ListView设置了一个自定义适配器。我还将默认项目选择涟漪动画设置为在选择项目时显示(
android:background=“?android:selectableitemcondground”
)。 但是,当我点击文本视图时,动画不会出现

我所做的一切都没有用:

  • 设置父LinearLayout的后代Focusability=“BlocksDescents”
  • 添加可点击的& 对文本视图设置focusable=“false”
以下是我的列表_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>

…要允许在
main活动中单击
onimclick
(如果我按文本或线性布局,它会打开相同的内容)。

我有一个解决您问题的方法:在getView()中尝试此方法:

第一行获取保存触摸文本视图的ListView项的RippleDrawable

当触摸TextView时,您将获得触摸的坐标,并使用setHotSpot将其设置为RippleDrawable,以指定涟漪效果的起点

之后,通过使用setState()将一个int数组设置为RippleDrawable,该数组包含按下的android.R.attr.state_和启用的android.R.attr.state_状态

触摸结束时,您将状态设置为空int数组,以停止涟漪。

它应该有用

该文本视图上是否有OnClickListener?@Locdoc01在适配器中是的,我在帖子中添加了该代码。如果文本视图上打开了相同的内容,您是否确实需要特定的OnClickListener。@Locdoc01如果我正确理解您的问题,那么是的,我确实需要它们。否则,我将无法通过单击文本视图打开另一个活动。这是一个记录笔记的应用程序,所以用户点击他们想要打开的笔记:他们可以点击整行——标题、文本或周围的空白——然后仍然打开笔记。嗯,这会创建动画,但现在我无法点击进入新活动或显示上下文菜单。我如何保持这些功能?是的,你可以。查看我对代码的编辑。在MotionEvent.ACTION\u UP的情况下,您可以执行任何您喜欢的操作。因此,您可以在另一个视图上执行performClick(),或者像您的例子一样,在父ListView上执行performClick(),或者可能是我搞错了您的问题?您希望在哪里单击以获取特定函数?
    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);
        }
    });
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;
    }
};