반응형
안드로이드(Android) Animation 클래스 이용해 View, Layout 애니메이션 효과주기 |
개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2 |
안드로이드에서 제공하는 android.view.animation.Animation 이용해 View, LinearLayout 에도 애니메이션 효과를 적용할수 있습니다. 예제는 AnalogClock, LinearLayout 에 애니메이션 효과를 적용하였습니다. |
이전 소스는 애니메이션 효과를 주기 위해
Xml 을 이용하였습니다. 이번에는 Animation 클래스를
상속받아 ViewAnimation 을 만들어 initialize(),
applyTransformation() 함수를 재구성 하였습니다.
public class ViewAnimation extends Animation { int centerX, centerY; @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); setDuration(5000); setFillAfter(true); setInterpolator(new LinearInterpolator()); centerX = width / 2; centerY = height / 2; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final Matrix matrix = t.getMatrix(); matrix.setScale(interpolatedTime, interpolatedTime); } }
다음은 두개의 버튼에 대한 구현인데 각 버튼이벤트에
LinearLayout, AnalogClock 객체를 가져온후 Animation 을
상속받아만든 ViewAnimation 객체를 startAnimation()
함수의 인수로 넘깁니다.
private Button.OnClickListener startButton1OnClickListener = new Button.OnClickListener() { public void onClick(View v) { LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout); linearLayout.startAnimation(new ViewAnimation()); } }; private Button.OnClickListener startButton2OnClickListener = new Button.OnClickListener() { public void onClick(View v) { AnalogClock animation = (AnalogClock) findViewById(R.id.myclock); animation.startAnimation(new ViewAnimation()); } };
View 를 상속받은 모든 객체는 startAnimation() 함수를
지원하므로 어떤 객체든 애니메이션 효과를 적용할수 있습니다.
그러니까 ViewAnimation 클래스를 잘 다듬어서
유용하게 쓰일 일이 있을 겁니다.
아래는 메인 레이아웃에 대한 xml 입니다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mylayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/start1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="LinearLayout 에 애니메이션 효과 적용하기 " /> <Button android:id="@+id/start2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="AnalogClock 에 애니메이션 효과 적용하기" /> <AnalogClock android:id="@+id/myclock" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
메인 activity 의 전체 소스입니다.
import android.app.Activity; import android.graphics.Matrix; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.Transformation; import android.widget.AnalogClock; import android.widget.Button; import android.widget.LinearLayout; public class SampleActivity20 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample_activity20); Button myStartButton1 = (Button) this.findViewById(R.id.start1); myStartButton1.setOnClickListener(startButton1OnClickListener); Button myStartButton2 = (Button) this.findViewById(R.id.start2); myStartButton2.setOnClickListener(startButton2OnClickListener); } private Button.OnClickListener startButton1OnClickListener = new Button.OnClickListener() { public void onClick(View v) { LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout); linearLayout.startAnimation(new ViewAnimation()); } }; private Button.OnClickListener startButton2OnClickListener = new Button.OnClickListener() { public void onClick(View v) { AnalogClock animation = (AnalogClock) findViewById(R.id.myclock); animation.startAnimation(new ViewAnimation()); } }; public class ViewAnimation extends Animation { int centerX, centerY; @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); setDuration(5000); setFillAfter(true); setInterpolator(new LinearInterpolator()); centerX = width / 2; centerY = height / 2; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final Matrix matrix = t.getMatrix(); matrix.setScale(interpolatedTime, interpolatedTime); } } }
반응형
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) Android library projects cannot be launched 에러발생시 처치 (0) | 2014.11.06 |
---|---|
안드로이드(Android) RadioGroup 과 RadioButton 이용한 예제 (0) | 2014.11.05 |
안드로이드(Android) SDK 업데이트 후 Please update ADT to the latest version 에러 (0) | 2014.11.05 |
안드로이드(Android) 에뮬레이터에서 GPS 정보를 제대로 테스트하기 위한 셋팅 (0) | 2014.11.04 |
안드로이드(Android) 레이아웃의 구조를 분석할수 있는 유틸 Hierarchy Viewer (0) | 2014.11.03 |
안드로이드(Android) GridView 를 이용해 이미지 리스트 만들기 (1) | 2014.11.02 |
안드로이드(Android) 상태바에 통지(Notifications) 메시지 보내기 (1) | 2014.11.02 |
안드로이드(Android) PhoneGap, Eclipse 와 연동하여 개발을 위한 환경셋팅 2부 (0) | 2014.11.01 |