如何设置捏拉缩放功能并单击以一起返回上一个活动?

时间:2015-12-15 02:59:00

标签: android ontouchlistener

我想设置一个imageview onclicklistener,当用户点击图片时,它会回到最后一个激活状态。但不知何故,我也需要捏缩放功能。问题是,当我尝试捏合和缩放时,听众认为我正在点击图像,所以它回到最后一个活动。我怎样才能实现这两个目标?

2 个答案:

答案 0 :(得分: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();
        }
    });

完成整个动画后启动意图。

答案 1 :(得分: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;
      }
    };