1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android流光动画 android开发自定义TextView文本流光效果——滑动解锁

Android流光动画 android开发自定义TextView文本流光效果——滑动解锁

时间:2021-12-22 00:28:01

相关推荐

Android流光动画 android开发自定义TextView文本流光效果——滑动解锁

由于项目需求,需要做一个app锁屏页,其中就有一个需要滑动解锁的文字流光效果。我这里通过自定义Textview来实现:

@Override

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

super.onLayout(changed, left, top, right, bottom);

final ValueAnimator animator = ValueAnimator.ofInt(0, 2*getMeasuredHeight());//这里使用到了ValueAnimation,

//2*getMeasuredHeight()是移动距离为2倍的文本高度

mValueAnimator = animator;

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator valueAnimator) {

mDx = (Integer) animator.getAnimatedValue();//这个是记录当前要移动的位置

postInvalidate();

}

});

animator.setRepeatMode(ValueAnimator.RESTART);

animator.setRepeatCount(ValueAnimator.INFINITE);

animator.setDuration(2000);

animator.start();

mLinearGradient = new LinearGradient(0, 2*getMeasuredHeight(), 0, 0, new int[]{getCurrentTextColor(), 0xff00ff00, getCurrentTextColor()},

new float[]{0, 0.5f, 1}, Shader.TileMode.CLAMP);//使用LinearGradient是为了实现一个渐变效果

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mHeight = h;

mWidth = w;

}

@Override

protected void onDraw(Canvas canvas) {

Matrix matrix = new Matrix();//使用Matrix记录光条移动路径 matrix.setTranslate(0, -mDx); mLinearGradient.setLocalMatrix(matrix);

mPaint.setShader(mLinearGradient);//setShader方法将光条绘制出来

super.onDraw(canvas);

}

public void stopAnimator() {

if (mValueAnimator != null) {

mValueAnimator.end();

}

}

public void startAnimator() {

if (mValueAnimator != null) {

mValueAnimator.start();

}

}

实现的效果图:

实现这个需求主要用到了一个ValueAnimation和LinearGradient,以及Paint中的setShader方法。具体用法可以自行了解!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。