在我的活动中是一个内容为“ Ecl pse”的TextView,其中缺少“ i”。单击按钮后,我希望字母“ i”出现在正确的位置。但是,“ i”的动画效果应如此之好,以至于在我单击按钮后,它首先显得有点大,然后变小,直到和其他字母一样大。但是暂时,在我的代码中,整个单词“ Ecl pse”都受到ValueAnimation的影响。单击按钮后,不仅“ i”变大了,而且整个单词“ Ecl pse”的位置也发生了变化:“ Ecl pse”下降,然后回到原点位置。我该如何解决?同样,在单击按钮后,我只希望字母“ i”看起来有点大,然后变小直到与单词“ Ecl pse”的其他字母一样大...
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tvhallo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="87dp"
android:text="Ecl pse"
android:textSize="70sp" />
<Button
android:id="@+id/BtnKlick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Klick" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tvhallo"
android:layout_alignBottom="@+id/tvhallo"
android:layout_alignLeft="@+id/BtnKlick"
android:layout_toLeftOf="@+id/BtnKlick"
android:text="i"
android:textSize="70sp" />
</RelativeLayout>
码:
public Button btn;
public TextView tw;
@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);
btn.setOnClickListener(this);}
@SuppressLint("NewApi")
public void onClick(View v) {
// TODO Auto-generated method stub
ValueAnimator animator = new ValueAnimator();
animator.setDuration(2000);
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)
{
tw.setText((CharSequence)animation.getAnimatedValue());
}
});
animator.start();}}
最佳答案
我真的怀疑TextView是您要实现的目标的正确工具。这既过高又不足以胜任这项工作。它可以显示具有各种格式的所有文本内容,并且有充分的理由被称为“完整的文本编辑器”。它的主要目的是提供一种显示文本的方法,并且可能显示很多文本(那是过分的杀伤力)。插入和(可能)缩放“ i”将导致其余字母移动,因为这是该类的用途。它旨在对文本进行布局,而不是静态布局,以使内容更改尽可能少地移动(这是不足的部分)
但是,您真正想要的不是显示文本,而是显示动画。我建议您在具有各种状态的任何成像程序中创建所需的文本:一个不带“ i”的文本,一些不带“ i”且过大且按比例缩小的文本,以及具有正确比例的最终图像。现在使用这些图像确实显示通过按下按钮触发的动画。我相信此任务的正确类别是AnimationDrawable,尽管我自己并未使用过。当然,有很多方法可以使您获得所需的确切行为,但是我希望这可以帮助您入门!