在我的主要活动中,我有一个带有“播放”文本的按钮。我希望文本逐渐增长,然后逐渐缩小。这应该循环直到单击按钮。这种效果看起来应该像温柔的光芒。
所以,我尝试使用Thread来实现这个目标:
// Play Button Animation Thread
Thread playAnimation = new Thread() {
public void run() {
try {
int textSize = 25;
while (textSize <= 50) {
playBtn.setTextSize(textSize);
textSize += .10;
sleep(100);
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
finally {
}
}
};
然后,我用:
调用了该线程playAnimation.start();
它不能像我一样工作,但现在我认为可能有更好的方法。任何帮助表示赞赏。
答案 0 :(得分:1)
您可以使用动画资源执行上述任务。
您需要创建动画资源文件(anim_play.xml)并将其放在res / anim文件夹中。
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:repeatCount="infinite"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.2"
android:toYScale="1.2" >
</scale>
将动画设置为特定视图。
play_btn = (Button) findViewById(R.id.btn_play);
playAnim = AnimationUtils.loadAnimation(this, R.anim.anim_play);
play_btn.startAnimation(playAnim);
当用户点击按钮时删除动画。
play_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
play_btn.clearAnimation();
}
});
答案 1 :(得分:1)
您编写的代码存在一些问题:
textSize
变量声明为int
。因此,每次迭代尝试将值递增0.1都是徒劳的,因为在每次操作后将值转换回int,从而减去刚刚添加的值(即25 + = 0.1 - > 25.1,强制转换为int - &gt; 25 ...泡沫,冲洗重复)。因此,您传递给setTextSize()
的值实际上从未发生变化。setTextSize()
)。这可以通过使用Handler
来管理线程来解决。如果您想要整个按钮进行动画处理,您可以像其他人建议的那样查看动画框架。但是,要自动化只需文本大小,您就走在正确的道路上......我们只需根据上面提到的点调整您的代码:
Handler mHandler = new Handler();
boolean mReverse = false;
Runnable mUpdate = new Runnable() {
@Override
public void run() {
float current = playBtn.getTextSize();
if(mReverse) {
current -= 0.1;
playBtn.setTextSize(current);
mReverse = (current <= 25);
} else {
current += 0.1;
playBtn.setTextSize(current);
mReverse = (current >= 50);
}
mHandler.postDelayed(mUpdate, 100);
}
}
Handler
在主线程上创建,Runnable
内的所有代码都在主线程上执行...因此您可以在那里更新UI。 postDelayed()
负责等待延迟,因此您根本不需要创建另一个线程。要开始制作动画,请致电
mHandler.postDelayed(mUpdate, 100);
代码中的任何位置。要随时停止动画,只需在每次迭代后停止调用postDelayed
。
HTH!
答案 2 :(得分:0)
在android中查找animations - 这是创建简单效果的最佳方式。
关于您的代码 - 只允许从主线程更改用户界面,因此您无法为动画创建另一个线程。