不能在Android Touch事件中使用点击波纹效果

问题描述 投票:2回答:1

我在这里看到了一些解决方案,但是它们都不适合我。我正在使用View.OnTouchListener类来检测我的应用代码中的单击和拖动事件。但是这种漂亮的涟漪效果现在已经消失了(也许是因为我在MotionEvent手势到达View.OnClickListener之前就在使用它。请注意return true块中的MotionEvent.ACTION_DOWN)。

我无法使用View.OnClickListener来检测点击事件,因为我的应用使用了多个复合手势(点击,点击保持,点击保持拖动等)。任何人都可以分享一些有关如何使用Android触摸手势创建涟漪效果的提示吗?

[这是View.OnTouchListener类中我的BaseAdapter实现的代码段:

v.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent ev) {
                switch (ev.getAction() & MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:
                        if(mAppActionDownListener != null) {
                            mAppActionDownListener.onAppActionDown(appObjectList.get(position), v);
                        }
                        Log.d("COOK", "ACTION_DOWN: " + ev.getX() + ", " + ev.getY());
                        t1 = System.currentTimeMillis();
                        return true;

                    case MotionEvent.ACTION_UP:
                        Log.d("COOK", "ACTION_UP: " + ev.getX() + ", " + ev.getY());
                        t2 = System.currentTimeMillis();
                        if(Math.abs(t2-t1) <=300) {
                            //Toast.makeText(context, "Click event", Toast.LENGTH_SHORT).show();
                            if(mAppClickListener!=null) {
                                mAppClickListener.onAppClicked(appObjectList.get(position), v);
                            }
                        }

                        return false;

                    case MotionEvent.ACTION_MOVE:
                        Log.d("COOK", "ACTION_MOVE: " + ev.getX() + ", " + ev.getY());

                        ClipData.Item item = new ClipData.Item(appObjectList.get(position).getAppname()+"~"+appObjectList.get(position).getPackagename()+"~"+appObjectList.get(position).getAppicon());
                        ClipData dragData = new ClipData(
                                (CharSequence) v.getTag(),
                                new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN},
                                item);
                        v.findViewById(R.id.appicondrawable).startDrag(dragData,  // the data to be dragged
                                new View.DragShadowBuilder(v.findViewById(R.id.appicondrawable)),  // the drag shadow builder
                                null,      // no need to use local data
                                0          // flags (not currently used, set to 0)
                        );

                        if(mAppDragListener!=null) {
                            mAppDragListener.onAppDragged(appObjectList.get(position), v);
                        }

                        return true;

                    default:
                        return false;

                }
            }
        });

任何帮助将不胜感激!

更新:

仅说明一下,由于上述原因,在父级自定义布局中设置背景/前景/可点击属性无效。我已经尝试过这些解决方案。

android user-interface ontouchlistener android-gesture rippledrawable
1个回答
0
投票

要在视图中添加波纹效果,可以将?attr/selectableItemBackground添加为视图的背景。

<ImageView
     android:height="100dp"
     android:width="100dp"
     android:src="@drawable/crush"
     android:background="?attr/selectableItemBackground"
     android:clickable="true"
     android:focusable="true" />
© www.soinside.com 2019 - 2024. All rights reserved.