OnLongPress增加时间

use*_*320 4 android ontouchlistener onlongclicklistener android-imageview

我有imageView.我使用平底锅,捏捏imageView.有时我需要删除imageView.所以,我使用OnLongClickListener删除图像.当我使用长按我的imageView删除.但是,当我使用OnTouchListener进行平移时,会激活imageView OnLongPress并从视图中删除我的imageView.怎么解决这个?

码:

    imageView.setOnLongClickListener(new OnLongClickListener(){

     @Override
     public boolean onLongClick(View v) {
        // TODO Auto-generated method stub
                                    imageView.setVisibility(View.GONE);

      return true;
        }

  });



   imageView.setOnTouchListener(new View.OnTouchListener() {
       final Handler handler = new Handler(); 
    Runnable mLongPressed = new Runnable() { 
        public void run() { 
            Log.i("", "Long press!");
        }   
    };



     @Override
       public boolean onTouch(View v,MotionEvent event) {
        // TODO Auto-generated method stub

    if(event.getAction() == MotionEvent.ACTION_DOWN)
        handler.postDelayed(mLongPressed, 1000);
    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() ==     MotionEvent.ACTION_UP))
        handler.removeCallbacks(mLongPressed);



    layoutParams = (RelativeLayout.LayoutParams) imageView.getLayoutParams();

        switch(event.getAction())
         {
     case MotionEvent.ACTION_DOWN :
      {
          parms = (RelativeLayout.LayoutParams) imageView.getLayoutParams();


      dx = event.getRawX() - parms.leftMargin;
      dy = event.getRawY() - parms.topMargin;


        }
    break;
      case MotionEvent.ACTION_MOVE :
        {
      x = event.getRawX();
      y = event.getRawY();
        parms.leftMargin = (int) (x-dx);
        parms.topMargin = (int) (y - dy);
                                            imageView.setLayoutParams(parms);

     }
     break;
     case MotionEvent.ACTION_UP :
     {

        }
       break;
    }
     return false;
       }
       });

      }

   });
Run Code Online (Sandbox Code Playgroud)

Rar*_*arw 9

您可以使用处理程序执行此操作,但如果用户将手指从屏幕上移开,则需要记住取消处理程序.Yogesh并非完全错误,但上述方法只是在onClick和执行runnable之间增加了1000毫秒的延迟.这意味着如果用户抬起手指,仍然可以运行runnable.这不是真正的长期印象.

下面你可以看到我仍在使用延迟1000毫秒的处理程序(你可以将它设置为你想要的任何东西),但如果用户抬起手指或移动,则删除回调.如果你想摆脱移动触发器,只需删除该部分通话.但是为了影响长按,您需要考虑电梯以确保用户一直握住他们的手指.

final Handler handler = new Handler(); 
Runnable mLongPressed = new Runnable() { 
    public void run() { 
        Log.i("", "Long press!");
    }   
};

@Override
public boolean onTouchEvent(MotionEvent event, View v){
    if(event.getAction() == MotionEvent.ACTION_DOWN)
        handler.postDelayed(mLongPressed, 1000);
    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() ==     MotionEvent.ACTION_UP))
        handler.removeCallbacks(mLongPressed);
        return false;    
}
Run Code Online (Sandbox Code Playgroud)