0

我有一个只有两个元素的列表视图。

您按下其中一个,它应该会振动 1000 毫秒并停止。

按下另一个,当你的手指向下按下它时,它应该是振动的。

同样,您单击第一个项目,它会振动 1000 毫秒……当您触摸并按住第二个项目时,它应该会振动,直到您移开手指。

下面我有相同的代码:

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> aView, View v, int position,
                long id) {
            switch (position) {
            case 0:
                Vibrator x = (Vibrator) getApplicationContext()
                        .getSystemService(Context.VIBRATOR_SERVICE);
                x.vibrate(1000);
                break;
            case 1: break;// Need To vibrate while pressed here
            }

        }

    });

    listview.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                Vibrator x = (Vibrator) getApplicationContext()
                        .getSystemService(Context.VIBRATOR_SERVICE);
                x.vibrate(5000);
            }
            if (event.getAction() == MotionEvent.ACTION_UP) {
                Vibrator xa = (Vibrator) getApplicationContext()
                        .getSystemService(Context.VIBRATOR_SERVICE);
                xa.cancel();
            }

            return true;
        }
    });

所以,我有两个听众

在第一个 (OnItemClick) ..

如果按下第一个按钮,我会振动 1 秒。

如果我只有这个功能,它会很好用(对于第一个按钮)

在第二个侦听器中,我采用了motionevent,因为我需要知道用户何时按下和备份..

但是,似乎第二个侦听器覆盖了第一个侦听器。

当我的 OnCreate() 中同时存在这两个侦听器时,setOnItemListener 根本不起作用。

就其本身而言,每个功能都完全按照我的意愿行事。但我需要将两者结合起来。

我需要在 OnItemListener 的“Case:1”中设置 OnTouchListener ...

因此,当单击第一个项目时,它会振动 1 秒......当单击第二个项目时,只要按下该项目,它就会振动(处于聚焦状态时)

知道如何将这两者结合起来吗?

(上面的代码效果很好,我只需要将 Touch Listener 放在 OnItemClick() 中,但它会报错...请随意复制 paste ,我只需要弄清楚如何准确放置函数。 ..)

谢谢 !

4

1 回答 1

0

将你OnTouchListener的移动到由for s 和 sView膨胀的地方。ListAdapterViewposition > 0

这种方式应该可以解决:

  1. OnItemClickListener应该仍然有效。
  2. 它仅在触摸 1.. 项目时振动。
于 2013-10-08T05:34:43.663 回答