是通过自定义EditText的Drawable来实现的。具体步骤如下:
下面是一个示例代码:
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.AppCompatEditText;
import android.util.AttributeSet;
public class AnimatedEditText extends AppCompatEditText {
private Drawable leftDrawable;
private ObjectAnimator animator;
public AnimatedEditText(Context context) {
super(context);
init();
}
public AnimatedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public AnimatedEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 获取左侧Drawable
leftDrawable = getCompoundDrawables()[0];
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制左侧Drawable
if (leftDrawable != null) {
leftDrawable.setBounds(0, 0, leftDrawable.getIntrinsicWidth(), leftDrawable.getIntrinsicHeight());
canvas.save();
canvas.translate(getPaddingLeft(), getPaddingTop() + (getHeight() - leftDrawable.getIntrinsicHeight()) / 2);
leftDrawable.draw(canvas);
canvas.restore();
}
}
public void startAnimation(boolean isLeft) {
// 根据isLeft参数决定向左或向右的动画效果
float start = isLeft ? 0 : getWidth() - getPaddingRight() - leftDrawable.getIntrinsicWidth();
float end = isLeft ? getWidth() - getPaddingRight() - leftDrawable.getIntrinsicWidth() : 0;
// 创建属性动画
animator = ObjectAnimator.ofFloat(this, "translationX", start, end);
animator.setDuration(1000);
animator.start();
}
public void stopAnimation() {
// 停止动画
if (animator != null && animator.isRunning()) {
animator.cancel();
}
}
}
使用该自定义EditText类时,可以调用startAnimation()方法来启动动画,调用stopAnimation()方法来停止动画。
这是一个简单的示例,你可以根据自己的需求进行扩展和修改。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云