Android_view的触摸反馈

  • 触摸控件使其能够有一定变化并且能够相应点击事件.
  • 这里简单实现view被触摸,做一个放大缩小的动画.
  • 而且用的时候要像直接设置view的onClickListener一样简单.
  • 我是在项目中有这样的需求就简单的实现了一下,今天做个记录.

    /**

    • Created by Qin_Li_Yang on 2017/11/14.
    • 创建一个TouchFeedback类
    • 这里使用单利模式,应该是可以的哈哈.
      */

    public class TouchFeedback {
    /**
    * 缩放动画的单方面时长,假如是100,是指放大100,当手指离开缩小又是100.
    */
    private int duration = 100;
    /**
    * 放大或者缩小的值
    */
    private float aFloatBig = 1.2f;

    /**
     * 可以自己设定
     *
     * @param duration
     * @param aFloatBig
     */
    public void setDurationAndFloatBig(int duration, float aFloatBig) {
        this.duration = duration;
        this.aFloatBig = aFloatBig;
    }
    
    /**
     * 私有构造
     */
    private TouchFeedback() {
    }
    
    /**
     * 定义回调的接口
     */
    public interface TouchFeedbackListener {
        void onFeedback(View view);
    }
    
    private static TouchFeedback touchFeedback = null;
    
    public static TouchFeedback getTouchFeedbackInstance() {
        if (touchFeedback == null) {
            synchronized (TouchFeedback.class) {
                if (touchFeedback == null) {
                    touchFeedback = new TouchFeedback();
                }
            }
        }
        return touchFeedback;
    }
    
    /**
     * 触摸的监听
     * @param touchFeedListener
     * @param view
     */
    public void setTouchFeedListener(final TouchFeedback.TouchFeedbackListener touchFeedListener, View view) {
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        scaleBig(v);
                        break;
                    case MotionEvent.ACTION_MOVE:
    
                        break;
    
                    case MotionEvent.ACTION_UP:
                        scaleSmall(v, true, touchFeedListener);
    
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        scaleSmall(v, false, touchFeedListener);
                        break;
                }
                return true;
            }
        });
    }
    
    /**
     * 恢复原形的动画
     * @param v
     * @param b
     * @param touchFeedListener
     */
    private void scaleSmall(final View v, boolean b, final TouchFeedbackListener touchFeedListener) {
        ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(v, "ScaleX", aFloatBig, 1f).setDuration(duration);
        ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(v, "ScaleY", aFloatBig, 1f).setDuration(duration);
        objectAnimator2.start();
        objectAnimator3.start();
        if (b) {
        /**动画执行的监听**/
            objectAnimator2.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
    
                }
    
                /**
                 * 动画结束
                 * @param animation
                 */
                @Override
                public void onAnimationEnd(Animator animation) {
                    touchFeedListener.onFeedback(v);
                }
    
                @Override
                public void onAnimationCancel(Animator animation) {
    
                }
    
                @Override
                public void onAnimationRepeat(Animator animation) {
    
                }
            });
        }
    
    
    }
    
            /**
             * 变大的动画
             * @param v
             */
            private void scaleBig(View v) {
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(v, "ScaleX", 1f, aFloatBig).setDuration(duration);
                ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(v, "ScaleY", 1f, aFloatBig).setDuration(duration);
                objectAnimator.start();
                objectAnimator1.start();
            }
        }
    
    • 简单使用
      /**

      • 实现刚才写的那个类里面的TouchFeedbackListener接口
        */
        public class MainActivity extends AppCompatActivity implements TouchFeedback.TouchFeedbackListener {

      private Button t1;
      private Button t2;
      private Button t3;
      private Button t4;
      private Button t5;
      private Button t6;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      initView();
      }

      private void initView() {
      t1 = (Button) findViewById(R.id.t1);
      t2 = (Button) findViewById(R.id.t2);
      t3 = (Button) findViewById(R.id.t3);
      t4 = (Button) findViewById(R.id.t4);
      t5 = (Button) findViewById(R.id.t5);
      t6 = (Button) findViewById(R.id.t6);

      TouchFeedback touchFeedbackInstance = TouchFeedback.getTouchFeedbackInstance();
      touchFeedbackInstance.setDurationAndFloatBig(300, 1.5f);
      touchFeedbackInstance.setTouchFeedListener(this, t1);
      touchFeedbackInstance.setTouchFeedListener(this, t2);
      touchFeedbackInstance.setTouchFeedListener(this, t3);
      touchFeedbackInstance.setTouchFeedListener(this, t4);
      touchFeedbackInstance.setTouchFeedListener(this, t5);
      touchFeedbackInstance.setTouchFeedListener(this, t6);
          }
      
          /**
           * 这里像onclick一样
           * @param view
           */
          @Override
          public void onFeedback(View view) {
              switch (view.getId()) {
                  case R.id.t1:
                      Toast.makeText(this, "t1", Toast.LENGTH_LONG).show();
                      break;
                  case R.id.t2:
                      Toast.makeText(this, "t2", Toast.LENGTH_LONG).show();
                      break;
                  case R.id.t3:
                      Toast.makeText(this, "t3", Toast.LENGTH_LONG).show();
                      break;
                  case R.id.t4:
                      Toast.makeText(this, "t4", Toast.LENGTH_LONG).show();
                      break;
                  case R.id.t5:
                      Toast.makeText(this, "t5", Toast.LENGTH_LONG).show();
                      break;
                  case R.id.t6:
                      Toast.makeText(this, "t6", Toast.LENGTH_LONG).show();
                      break;
              }
          }
      }
      

源码

猜你喜欢

转载自blog.csdn.net/qq_25452989/article/details/78533683
今日推荐