列表视图项的波纹动画无法通过单击包含文本视图来工作



我为我的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数组,停止纹波。
它应该起作用!

相关内容

  • 没有找到相关文章

最新更新