package com.m; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.content.Context; import android.os.Handler; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.animation.LinearInterpolator; import android.widget.RelativeLayout; /** * 作者:zhangzhizhen on 2018/7/3. * 设置首页 图片按下缩小还原动画 */ public class ClickRelativeLayout extends RelativeLayout { private Animator anim1; private Animator anim2; private int mHeight; private int mWidth; private float mX, mY; private Handler mHandler = new Handler(); private ClickListener listener; public ClickRelativeLayout(Context context) { super(context); } public ClickRelativeLayout(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mHeight = getHeight() - getPaddingTop() - getPaddingBottom(); mWidth = getWidth() - getPaddingLeft() - getPaddingRight(); mX = getX(); mY = getY(); } private void init() { PropertyValuesHolder valueHolder_1 = PropertyValuesHolder.ofFloat( "scaleX", 1f, 0.95f); PropertyValuesHolder valuesHolder_2 = PropertyValuesHolder.ofFloat( "scaleY", 1f, 0.95f); anim1 = ObjectAnimator.ofPropertyValuesHolder(this, valueHolder_1, valuesHolder_2); anim1.setDuration(700); anim1.setInterpolator(new LinearInterpolator()); PropertyValuesHolder valueHolder_3 = PropertyValuesHolder.ofFloat( "scaleX", 0.95f, 1f); PropertyValuesHolder valuesHolder_4 = PropertyValuesHolder.ofFloat( "scaleY", 0.95f, 1f); anim2 = ObjectAnimator.ofPropertyValuesHolder(this, valueHolder_3, valuesHolder_4); anim2.setDuration(700); anim2.setInterpolator(new LinearInterpolator()); } public void setClickListener(ClickListener clickListener) { this.listener = clickListener; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mHandler.post(new Runnable() { @Override public void run() { if(anim2!=null){ anim2.end(); } if(anim1!=null){ anim1.start(); } } }); break; case MotionEvent.ACTION_MOVE: mHandler.post(new Runnable() { @Override public void run() { if(anim2!=null){ anim2.start(); } if(anim1!=null){ anim1.end(); } } }); break; case MotionEvent.ACTION_UP: mHandler.post(new Runnable() { @Override public void run() { if(anim2!=null){ anim2.start(); } if(anim1!=null){ anim1.end(); } } }); if (listener != null) { listener.onClick(); } break; case MotionEvent.ACTION_CANCEL: break; } return true; } //按下的点是否在View内 protected boolean innerImageView(float x, float y) { if (x >= mX && y <= mX + mWidth) { if (y >= mY && y <= mY + mHeight) { return true; } } return true; } /** * 点击事件处理回调 * @author renzhiqiang * */ public interface ClickListener { public void onClick(); } @Override protected void onDetachedFromWindow() { // TODO Auto-generated method stub super.onDetachedFromWindow(); } }
clickRelativeLayout.setClickListener(new ClickRelativeLayout.ClickListener() { @Override public void onClick() {
} });