Android 仅用一个字母缩放动画?

Android 仅用一个字母缩放动画?,android,eclipse,android-animation,Android,Eclipse,Android Animation,在我的活动中有一个单词“Ecl pse”和一个按钮。在我点击按钮后,我希望字母“I”看起来大,然后变小,直到它和单词Ecl pse的其他字母一样大。瞬间,整个单词Eclipse都会受到缩放动画的影响。所以当我点击按钮后,整个单词Eclipse看起来越来越大,越来越小。但我只希望字母“I”缩放动画。这是怎么回事 public Button btn; public TextView tw; Animation a; @Override protected void onCreate(Bundle

在我的活动中有一个单词“Ecl pse”和一个按钮。在我点击按钮后,我希望字母“I”看起来大,然后变小,直到它和单词Ecl pse的其他字母一样大。瞬间,整个单词Eclipse都会受到缩放动画的影响。所以当我点击按钮后,整个单词Eclipse看起来越来越大,越来越小。但我只希望字母“I”缩放动画。这是怎么回事

public Button btn;
public TextView tw;
Animation a;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pagetwo);



    btn = (Button) findViewById(R.id.BtnKlick);
    tw = (TextView) findViewById(R.id.tvhallo);
    a= AnimationUtils.loadAnimation(this, R.anim.scale);

    btn.setOnClickListener(this);

    SpannableString text = new SpannableString("Ecl pse");  

}



@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

    String text = tw.getText().toString();
    int n = 3; 
    String newText = text.substring(0, n) + "i" + text.substring(n + 1);

    tw.setText(newText);
    tw.startAnimation(a);

可以通过将(带标记的文本)与组合来实现此目的,以随时间更新所需零件的相对大小。例如:

ValueAnimator animator = new ValueAnimator();
animator.setDuration(4000);
animator.setObjectValues("Ecl pse", "Eclipse");

animator.setEvaluator(new TypeEvaluator<CharSequence>()
{
    @Override
    public CharSequence evaluate(float fraction, CharSequence startValue, CharSequence endValue)
    {
        float relativeSize = 4 - 3 * fraction;
        Spannable span = new SpannableString("Eclipse");
        span.setSpan(new RelativeSizeSpan(relativeSize), 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return span;
    }
});

animator.addUpdateListener(new AnimatorUpdateListener()
{
    @Override
    public void onAnimationUpdate(ValueAnimator animation)
    {
        textView.setText((CharSequence)animation.getAnimatedValue());
    }
});

animator.start();
ValueAnimator animator=新的ValueAnimator();
设置持续时间(4000);
setObjectValues(“Ecl pse”、“Eclipse”);
animator.setEvaluator(新的TypeEvaluator()
{
@凌驾
公共字符序列求值(浮点分数、字符序列起始值、字符序列结束值)
{
浮动相对尺寸=4-3*分数;
Spannable span=新SpannableString(“Eclipse”);
span.setSpan(新的RelativeSizeSpan(relativeSize),3,4,span可启用的.span_独占性span_独占性);
返回跨度;
}
});
addUpdateListener(新的AnimatorUpdateListener()
{
@凌驾
动画更新上的公共无效(ValueAnimator动画)
{
textView.setText((CharSequence)animation.getAnimatedValue());
}
});
animator.start();

这将显示一个4倍于周围文本大小的“i”,然后将其变小,直到与其他文本大小相同。您可以自定义持续时间、插值器和c以达到您想要的效果。

为什么不为“i”使用单独的文本视图?很难将i置于Ecl和pse之间,因为它与其他字母处于相同的距离?!我不知道它是如何工作的…thx,但有了这个代码,不仅I变大变小,而且整个单词Ecl pse的位置也发生了变化。它下降然后回到原点?!这取决于TextView的textAlignment及其LayoutParams中的高度值(可能是WRAP_内容——随着文本变大,视图大小也会变大)。您应该能够通过更改这些参数来修复它。好的,但是是否不可能使用我的代码并将其稍微不同?我不这么认为。缩放动画适用于整个视图。是否可以给“i”另一种颜色?