2015-12-15 277 views
1

我想设置一个imageview onclicklistener,当用户点击图片时,它回到最后的活动。但不知何故,我也需要捏缩放功能。问题是,当我尝试捏和放大时,听众认为我正在点击图像,因此它返回到最后一个活动。我怎样才能实现这两个?如何设置缩放缩放功能并点击返回上一个活动?

+0

我用这https://github.com/davemorrissey/subsampling-scale-image-view库用于捏缩放和图像点击正在与它完美配合 –

回答

0

我不知道你是想在同一时间还是一个一个地做两个。 但这里有一个想法。

mImageView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Animation anim = null; 
      // init your anim 
      anim.setAnimationListener(new AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        // TODO Auto-generated method stub 
        startActivity(new Intent()); 
       } 
      }); 

      anim.start(); 
     } 
    }); 

在整个动画完成后开始意图。

+0

不,它不起作用。情况是:现在我有一个由我创建的'ScaleImageView'类,它包含有关如何缩放和拖动图像的事件。但在'ScaleImageView'类中它有一个'onTouchListener',在监听器中,每个事件都会对我进行点击和完成()。 –

+0

如果你的'onTouchuListener'返回'false',可能会起作用,如果stil不起作用,那么发布'onTouchuListener'。 –

0

我找到了一种轻松解决问题的方法,但它有点硬编码。

我已经设置了一个触摸监听器,而不是一个点击监听器,然后当我的手指触及时,我得到当前的毫秒数。当我的手指向上时,我再次获得当前的毫秒数。所以我比较两个时间,如果endTime - startTime < 100(0.1秒),活动将关闭。否则将被认为是一个捏动作

这里是我的代码(因为你不能在0.1秒右捏?):

private View.OnTouchListener mAttachmentViewOnTouch = new View.OnTouchListener(){ 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       startTime = System.currentTimeMillis(); 
       return true; 
      } 

      if (event.getAction() == MotionEvent.ACTION_UP) { 
       endTime = System.currentTimeMillis(); 
       if (endTime - startTime < 100) 
        finish(); 
       return true; 
      } 

      if (event.getAction() == MotionEvent.ACTION_POINTER_DOWN) 
      { 
       startTime = 0; 
       endTime = 1000; 
       return true; 
      } 
      if(event.getAction() == MotionEvent.ACTION_POINTER_UP) 
      { 
       startTime = 0; 
       endTime = 1000; 
       return true; 
      } 



      return false; 
     } 
    };