본문 바로가기
프로그래밍/안드로이드

안드로이드 애니메이션2

by -현's- 2015. 3. 30.
반응형


●예제

- 쓰레드를 이용하여 사용자가 직접 애니매이션 효과를 만들어 본다. 아래 예제는 화면을 터치하면 이미지가 움직이는 예제이다.


- AniActivity.java

package study.thread;


import com.example.day0328.R;


import android.app.Activity;

import android.os.Bundle;


public class AniActivity extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.ani_layout);

}

}




- MyView.java

package study.thread;


import com.example.day0328.R;


import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.os.Handler;

import android.os.Message;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;


public class MyView extends View{


Bitmap bitmap;

int x, y;

Thread thread;

Handler handler;

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

handler = new Handler(){

//자식쓰레드가 요청한 업무를 수행하는 메서드 재정의

public void handleMessage(Message msg) {

move();

}

};

thread = new Thread(){

public void run() {

super.run();

//쓰레드가 죽지않고 계속 진행되려면 run()의 받는 괄호를 만나게 해서는 안된다.

while(true){

//move();

//메인쓰레드에게 move호출을 부탁

//핸들러에게 handleMessage()를 수행하게 한다.

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

handler.sendEmptyMessage(0);

}

}

};

}

//모든 위젯은 스스로를 그릴때, onDraw메서드를 호출하게 돼있다.

//따라서 개발자가 이 시점에 원하는 그래픽 처리를 할 수 있다.

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//비트맵 이미지를 올려놓고 자동으로 이동하는 효과

canvas.drawBitmap(bitmap, x, y, null);

}

//그림을 이동시키는 메서드

public void move(){

x+=5;

y+=5;

//현재 화면의 뷰에 그려진 그림을 지우고 다시 갱신

//자바표준에서는 repaint()라는 것이 있다.

invalidate();

}

public boolean onTouchEvent(MotionEvent event) {

thread.start();

return super.onTouchEvent(event);

}

}


 



- ani_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <study.thread.MyView 

        android:id="@+id/myView"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:background="#ffdd00"/>

    

</LinearLayout>











반응형

댓글