如何选择GridView项并在getView中使用onTouchListener?(它们似乎互相取消)

时间:2015-07-06 22:37:19

标签: android gridview android-listview

当我在我的适配器的getView中使用onTouchListener行时

android:listSelector="@drawable/circle"

立即停止工作,如果我将onTouch设置为返回false它再次起作用,然后ACTION_DOWN ACTION_UP剂量正常工作。

继承人onTouch

的内容
image.setOnTouchListener(new View.OnTouchListener() {
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                Assets.playMusic(songID, false);
            } else if (event.getAction() == MotionEvent.ACTION_UP) {              
                Assets.mediaPlayer.stop();
                Assets.mediaPlayer = null;
                }

            return true;
        }

    }); 

只要您手指握住该项目,它就会播放音乐,当您释放它时应该停止音乐。返回true时效果很好。但是由于某种原因,圆圈停止出现在敲击物品后面。如果设置为false,则会出现圆圈,但是action_up dosent会停止音乐

我尝试使用.setSelected .setActivated .setEnabled并且它们都不起作用 请帮忙

此外,我希望它有点像snapchats相机按钮,点击它,它做一件事,持有它,它做了一些持续时间。我打算在Action上下使用时间变量。但是,如果有人知道另一种方法,这个ID也会有关于此的信息

1 个答案:

答案 0 :(得分:1)

在这种情况下,不鼓励将OnTouchListener附加到图像,而是附加到GridView的项目。

你应该有这样的东西:

GridView gridview = (GridView) findViewById(R.id.the_gridview_id);
gridview.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, final View v, int position, long id) {
        doSomething();
    }
});

修改: 为了知道按下视图的时间,您可以执行like this

// this goes somewhere in your class:
long lastDown;
long lastDuration;

...


// this goes wherever you setup your button listener:
gridview.setOnTouchListener(new OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
      if(event.getAction() == MotionEvent.ACTION_DOWN) {
         lastDown = System.currentTimeMillis();
      } else if (event.getAction() == MotionEvent.ACTION_UP) {
         lastDuration = System.currentTimeMillis() - lastDown;
      }
   }
};