有没有办法在xml中做到这一点?是否有具有此模式的实现?
示例(渐变,不是二进制):
_ =空
我发现的唯一方法是为每个字母创建一个文本,并为每个字母添加一个动画,但这并不实际。
答案 0 :(得分:2)
有没有办法在xml中做到这一点?有没有一个实现 这种模式?
我不确定XML的实现,但是与使用Spannable
的for循环相比,您可以轻松实现所需的效果。
您可以使用SpannableString
并将空字母的颜色设置为与背景相同,以使其透明。
然后通过将textColor
更改为最后一个为它们设置动画。
您可以使用以下功能:
private void showTextAnimated(final int[] positions){
final SpannableString myText = new SpannableString(mTextView.getText());
for(int i = 0; i< positions.length; i++){
myText.setSpan(new ForegroundColorSpan(Color.TRANSPARENT),positions[i] ,positions[i]+1 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mTextView.setText(myText);
ValueAnimator anim = ObjectAnimator.ofArgb(Color.BLACK);
anim.setRepeatCount(positions.length);
anim.setDuration(1000);
anim.addListener(new Animator.AnimatorListener() {
int counter = 0;
@Override
public void onAnimationStart(Animator animation) {
//no-op
}
@Override
public void onAnimationEnd(Animator animation) {
//no-op
}
@Override
public void onAnimationCancel(Animator animation) {
//no-op
}
@Override
public void onAnimationRepeat(Animator animation) {
myText.setSpan(new ForegroundColorSpan(Color.BLACK),positions[counter] ,positions[counter]+1 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(myText);
counter++;
}
});
anim.start();
}
您可以这样称呼它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int[] lettersToAnimate = new int[] {2,9,8,3};
mTextView = findViewById(R.id.myTextView);
showTextAnimated(lettersToAnimate);
}
您还可以查看HTextView,该库的衰落插件使字母随机渐入:
动画效果是文本效果,不是真正的textview