我想在文本视图中增加/减少文本大小,而不是.setTextSize()
方法。就像当我点击一个按钮时,尺寸必须平滑而不是突然地从一个变为另一个。过渡必须随着增加而可见,以便获得良好的UI
经验。我尝试使用一个循环,其中大小通过小小的位改变,但也可以快速可见。所以请有人建议我这样做的方法。我只是Android的初学者
答案 0 :(得分:1)
这可以通过ValueAnimator
来实现。
试试这个:
final TextView tv = new TextView(getApplicationContext());
Button btnPlay = (Button) findViewById(R.id.btnPlay);
btnPlay.setOnClickListener(MainActivity.this);
final float startSize = 42; // Size in pixels
final float endSize = 12;
final int animationDuration = 600; // Animation duration in ms
ValueAnimator animator = ValueAnimator.ofFloat(startSize, endSize);
animator.setDuration(animationDuration);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedValue = (float) valueAnimator.getAnimatedValue();
tv.setTextSize(animatedValue);
}
});
@Override
public void onClick(View view)
{
if(view == btnPlay)
{
animator.start();
}
}
在按钮的单击列表器中使用此代码,您可以在此处实现此目的。
答案 1 :(得分:0)
您可以使用View Animation.
执行此操作
您应该从here
在tour textanim.xml
文件夹中创建一个res/anim
。 (如果没有创建,首先在res文件中添加anim文件夹。)
你的textanim.xml
应该是这样的。
<set android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
<set android:interpolator="@android:anim/decelerate_interpolator">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="400"
android:fillBefore="false" />
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="400" />
</set>
</set>
转到相关的java文件(在Activity中),你必须像这样使用这个动画,
TextView mT = (TextView) findViewById(R.id.yourTextViewId);
Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.textanim);
mText.startAnimation(myAnim);