나는 View
커스텀을 썼다. 이제 사용자가 터치 할 때 약간의 맞춤 애니메이션을 만들고 싶습니다. 나는 정의를 말할 때안드로이드의 맞춤 애니메이션
, 나는 기본적으로 각 프레임에게 자신을 렌더링 할 말은하고, 는 설명 here 같은 "미리 정의 된"애니메이션을 사용하지 마십시오.
이것을 구현하는 올바른 방법은 무엇입니까?
나는 View
커스텀을 썼다. 이제 사용자가 터치 할 때 약간의 맞춤 애니메이션을 만들고 싶습니다. 나는 정의를 말할 때안드로이드의 맞춤 애니메이션
, 나는 기본적으로 각 프레임에게 자신을 렌더링 할 말은하고, 는 설명 here 같은 "미리 정의 된"애니메이션을 사용하지 마십시오.
이것을 구현하는 올바른 방법은 무엇입니까?
대부분의 유연성 (꽤 쉬운) 방법은 Animation
클래스를 확장하는 것입니다. 일반적으로
: setDuration()
방법을 사용하여 애니메이션의
applyTransformation
방법 (exapmle 당신이 LinearInterpolator
또는 AccelerateInterpolator
등을 사용할 수 있습니다) setInterpolator()
를 사용하여 애니메이션 보간을 설정합니다. 여기서 우리는 interpolatedTime
변수에 관심이 있으며 0.0에서 1.0 사이에서 변경되며 애니메이션 진행 상황을 나타냅니다. 여기 은 예입니다. (내 Bitmap
Bitmap
자체가 draw
방식으로 그려의 ofsset을 변경하려면이 클래스를 사용하고 있습니다) :
public class SlideAnimation extends Animation {
private static final float SPEED = 0.5f;
private float mStart;
private float mEnd;
public SlideAnimation(float fromX, float toX) {
mStart = fromX;
mEnd = toX;
setInterpolator(new LinearInterpolator());
float duration = Math.abs(mEnd - mStart)/SPEED;
setDuration((long) duration);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
float offset = (mEnd - mStart) * interpolatedTime + mStart;
mOffset = (int) offset;
postInvalidate();
}
}
은 또한 당신이
Transformation#getMatrix()
를 사용하여
View
을 수정할 수 있습니다.
UPDATE
당신이 안드로이드 애니메이터 프레임 워크 (또는 호환성 구현 - NineOldAndroids
)를 사용하는 경우에 경우에 당신은 당신의 사용자 정의 View
속성에 대한 세터와 게터를 선언하고 직접 애니메이션을 적용 할 수 있습니다. 다음은 다른 예입니다.
public class MyView extends View {
private int propertyName = 50;
/* your code */
public int getPropertyName() {
return propertyName;
}
public void setPropertyName(int propertyName) {
this.propertyName = propertyName;
}
/*
There is no need to declare method for your animation, you
can, of course, freely do it outside of this class. I'm including code
here just for simplicity of answer.
*/
public void animateProperty() {
ObjectAnimator.ofInt(this, "propertyName", 123).start();
}
}
"Ahaaaa!" 효과. 좋은! – Terry
XML에서 트위닝 된 애니메이션을 정의하는 것 외에도 프레임 별 애니메이션 (res/drawable에 저장 됨)을 정의 할 수 있습니다.
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
>
<item android:drawable="@drawable/frame1" android:duration="300" />
<item android:drawable="@drawable/frame2" android:duration="300" />
<item android:drawable="@drawable/frame3" android:duration="300" />
</animation-list>
애니메이션을 setBackgroundResource를 통해보기 배경으로 설정하십시오.
더 복잡한 작업을 수행하려는 경우 Canvas 클래스를 살펴보십시오. draw with Canvas에 대한 간단한 소개를 참조하십시오.
Animation animation = new AnimationDrawable();
animation.addFrame(getResources().getDrawable(R.drawable.exp1), 50);
animation.addFrame(getResources().getDrawable(R.drawable.exp2), 50);
animation.addFrame(getResources().getDrawable(R.drawable.exp3), 50);
animation.addFrame(getResources().getDrawable(R.drawable.exp4), 50);
animation.addFrame(getResources().getDrawable(R.drawable.exp5), 50);
animation.addFrame(getResources().getDrawable(R.drawable.exp6), 50);
이것은 내 onCreate()에서 프레임 별 애니메이션을 사용자 정의하는 데 사용하는 코드입니다.
그런 다음 애니메이션을 시작해야하지만 UI 스레드 내부에서 애니메이션을 시작해야합니다. 그래서 나는 Runnable을 사용한다. I 가정
((ImageView) findViewById(R.id.ImageToAnimateOnClicking)).post(new Starter());
멋지게 보입니다. 이러한 드로어 블을 프로그래밍 방식으로 렌더링하는 것이 실현 가능합니까? (애니메이션은 사용자가 클릭하는 위치에 따라 달라집니다 ...) – aioobe
'AnimationDrawable' '애니메이션'은 setBackgroundResource를 통해 배경보기로 설정할 수 있습니다. 오버레이를 사용하여 절대적으로 배치하는 쉬운 방법을 찾을 수도 있습니다. 아마 사용자가 클릭하는 위치에 달려 있습니다! (버튼, 표면보기, 이미지, 목록보기) –
비트 맵으로서 각각의 프레임을 생성 한 다음, 애니메이션에 건네
class Starter implements Runnable {
public void run() {
animation.stop();
animation.start();
}
}
저는 이미지 뷰의 .post() 메소드를 사용하여) (온 클릭으로부터의 Runnable 것을 시작할 리소스에서 드로어 블을 가져 오는 대신 직접 가져올 수 있습니다. 사용자 지정 애니메이션을 만들 수
Bitmap bm = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_888);
Canvas c = new Canvas(bm);
.... Draw to bitmap
animation.addFrame(bm,50)
.... repeat for all frames you wish to add.
사용자 정의보기에 추가 할 수있는 네 가지 유형의 애니메이션이 있습니다.
가 blog post 인 요소의 회전을 애니메이션화하는 그들 각각에 대해 자세히 설명합니다.
일단 애니메이션을 만들었 으면 아래 코드를 사용하여 해당 맞춤 애니메이션을보기에 추가하십시오.
findById(R.id.element).startAnimation(AnimationUtils.loadAnimation(this, R.anim.custom_animation));
제 질문에서 두 번째 단락을 놓친 것 같아요. – aioobe
[안드로이드 사용자 지정 애니메이션은] (http://www.singhajit.com/android-custom-animations/) –
@AjitSingh는, 그 기사는 표준 애니메이션 (회전, 번역 등)에 대해 설명합니다. 여기서 내가 묻는 것은 맞춤 애니메이션입니다. – aioobe