ViewAnimator实现按钮切换动画

来源:互联网 发布:淘宝上的黑科技产品 编辑:程序博客网 时间:2024/05/16 07:51
<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="100"    android:fromYDelta="80%p"    android:interpolator="@android:anim/linear_interpolator"    android:toYDelta="0" />
<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="100"    android:fromYDelta="0"    android:interpolator="@android:anim/linear_interpolator"    android:toYDelta="-80%p" />
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android">    <TextView        android:id="@+id/tvSend"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:text="SEND"        android:textColor="#ffffff"        android:textSize="12sp" />    <TextView        android:id="@+id/tvDone"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:text=""        android:textColor="#ffffff"        android:textSize="12sp" /></merge>
public class SendCommentButton extends ViewAnimator implements View.OnClickListener {    public static final int STATE_SEND = 0;    public static final int STATE_DONE = 1;    private static final long RESET_STATE_DELAY_MILLIS = 2000;    private int currentState;    private OnSendClickListener onSendClickListener;    private Runnable revertStateRunnable = new Runnable() {        @Override        public void run() {            setCurrentState(STATE_SEND);        }    };    public SendCommentButton(Context context) {        super(context);        init();    }    public SendCommentButton(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init() {        LayoutInflater.from(getContext()).inflate(R.layout.view_send_comment_button, this, true);    }    @Override    protected void onAttachedToWindow() {        super.onAttachedToWindow();        currentState = STATE_SEND;        super.setOnClickListener(this);    }    @Override    protected void onDetachedFromWindow() {        removeCallbacks(revertStateRunnable);        super.onDetachedFromWindow();    }    public void setCurrentState(int state) {        if (state == currentState) {            return;        }        currentState = state;        if (state == STATE_DONE) {            setEnabled(false);            postDelayed(revertStateRunnable, RESET_STATE_DELAY_MILLIS);            setInAnimation(getContext(), R.anim.slide_in_done);            setOutAnimation(getContext(), R.anim.slide_out_send);        } else if (state == STATE_SEND) {            setEnabled(true);            setInAnimation(getContext(), R.anim.slide_in_send);            setOutAnimation(getContext(), R.anim.slide_out_done);        }        showNext();    }    @Override    public void onClick(View v) {        if (onSendClickListener != null) {            onSendClickListener.onSendClickListener(this);        }    }    public void setOnSendClickListener(OnSendClickListener onSendClickListener) {        this.onSendClickListener = onSendClickListener;    }    @Override    public void setOnClickListener(OnClickListener l) {        //Do nothing, you have you own onClickListener implementation (OnSendClickListener)    }    public interface OnSendClickListener {        public void onSendClickListener(View v);    }}
0 0