저는 모바일 게임을 개발 중입니다. 게임에서 사용자가 버튼을 누르기 전에 버튼을 눌러 게임을 '재미'하게 만들고 버튼이 더 빠르고 빠른 속도로 줄어들 기 때문에 사용자가 하나의 버튼을 누르면 다른 버튼이 팝업됩니다. 더 빨리 줄어 듭니다. 지금까지 사용자 입력 및 버튼 축소를 처리하는이 코드가 있지만 일단 누르면 애니메이션이 없으면 즉시 '축소'크기로 스냅됩니다.이 문제를 해결하는 방법을 모르겠습니다.
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)
그것이 스냅되는 이유라고 생각했기 때문에 줄을 추가했지만 (즉 애니메이션을 보지 못했기 때문에 너무 빠르다) 버튼의 크기가 업데이트 될 때까지 앱이 멈추기 때문에 그렇지 않습니다.
추신 나는 모바일 앱 개발에 관해서는 아주 새롭습니다.
편집하다
원래 게시물에 쓴 내용은 잊어 버려. 아래 코드를 시도해보고 이것이 도움이되는지 알려주십시오.
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는 해당 이름을 사용하는 경우 애니메이션을 보관하는 폴더로 자동 처리합니다. anim-folder> new> 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"
코드 내에서 애니메이션을 동적으로 조정할 수 있습니다.
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에서 애니메이션이 끝날 때 무엇을할지 결정해야합니다. 몇 가지 아이디어 :
@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);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다