[英]How do I make the button the user pressed, shrink in size upon being pressed?
我正在開發一款手機游戲,在游戲中,用戶在按鈕收縮之前按下按鈕,為了讓游戲“有趣”,按鈕收縮的速度越來越快,所以當用戶按下一個按鈕時,另一個按鈕就會彈出向上收縮得更快。 到目前為止,我有處理用戶輸入和縮小按鈕的代碼,但是,一旦按下沒有 animation,它會立即捕捉到“縮小”大小,我不知道如何解決這個問題。
button.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
ViewGroup.LayoutParams params = button.getLayoutParams();
Integer value = 120;
while(value >= 2) {
value = value - 1;
SystemClock.sleep(50);
params.width = value;
params.height = value;
button.setLayoutParams(params);
};
}
});
我添加了SystemClock.sleep(50)
行,因為我認為這就是它正在捕捉的原因(即它是如此之快以至於我只是沒有看到動畫)但事實並非如此,因為應用程序只是掛起直到按鈕的大小已更新。
Ps 在開發移動應用程序方面我是個新手。
編輯
忘記我在原始帖子中寫的內容。 請嘗試下面的代碼,讓我知道這是否對您有幫助。
final ValueAnimator valueAnimator = ValueAnimator.ofFloat(1.0f, 0.0f); //start and end value
valueAnimator.setDuration(2000); //you can replace 2000 with a variable you can change dynamically
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float animatedValue = (float) animation.getAnimatedValue();
button.setScaleX(animatedValue);
button.setScaleY(animatedValue);
}
});
valueAnimator.start();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
valueAnimator.pause();
}
});
原始答案
我會遵循 0X0nosugar 的建議。
在 Android 文件樹中,在 res 目錄下,添加 Android 資源目錄(右鍵單擊 res 文件夾 > 新建)並將其命名為“anim”。 如果您使用該名稱,Android Studio 可能會自動將其視為包含 animation 的文件夾。 再次右鍵單擊動畫文件夾 > 新建 > Animation 資源文件。 把它命名為你想要的。 在我的示例中,我將其命名為 button_animator。
您的文件樹將如下所示:
您的 button_animator.xml 可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="0.1"
android:fromYScale="1.0"
android:toYScale="0.1"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="500" />
</set>
您可以使用這些行來定制按鈕的結束比例:
android:toXScale="0.1"
和
android:toYScale="0.1"
在您的代碼中,您可以動態地定制您的 animation:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation shrinkButton = AnimationUtils.loadAnimation(MainActivity.this, R.anim.button_animator); //reference the animator
shrinkButton.setDuration(5000); //dynamically set the duration of your animation
button.startAnimation(shrinkButton); //start the animation. Since it is inside an onclicklistener, the animation start on a button click event
shrinkButton.setAnimationListener(new Animation.AnimationListener() { //you could use an AnimationListener to do something on certain event, like at the end of the animation
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) { //you probably want to something onAnimationEnd, otherwise the button will snap back into its original size.
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
});
在 onAnimationEnd 中,您必須決定在 animation 結束時要做什么。 只是幾個想法:
@Override
public void onAnimationEnd(Animation animation) { //you probably want to something onAnimationEnd, otherwise the button will snap back into its original size.
button.setScaleX(0.1f); //same size as in toScale size in the animator xml
button.setScaleY(0.1f);
}
或者,如果您希望按鈕變得不可見:
@Override
public void onAnimationEnd(Animation animation) {
button.setVisibility(View.INVISIBLE);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.