package com.example.ad.tutorial2;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Totorial2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
class MyView extends View {
int width, height;
int cx,cy;
int tw, th;
int sw, sh;
int ang, dir;
int an1, an2;
Bitmap imgToy, imgShadow;
public MyView(Context context) {
super(context);
DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
width = dm.widthPixels;
height = dm.heightPixels;
cx = width /2;
cy = height /2 +100;
imgToy = BitmapFactory.decodeResource(context.getResources(), R.drawable.toy);
imgShadow = BitmapFactory.decodeResource(context.getResources(), R.drawable.shadow);
tw = imgToy.getWidth()/2;
th = imgToy.getHeight();
sw = imgShadow.getWidth()/2;
sh = imgShadow.getHeight()/2;
ang = 0;
dir = 10;
mHandler.sendEmptyMessageDelayed(0,10);
}
public void onDraw(Canvas canvas) {
RotateToy();
canvas.drawBitmap(imgShadow, cx -sw, cy-sh, null);
canvas.rotate(ang, cx ,cy);
canvas.drawBitmap(imgToy,cx -tw,cy-th, null);
canvas.rotate(-ang,cx,cy);
}
private void RotateToy() {
ang += dir;
if (ang <= an1 || ang >= an2) {
an1 ++;
an2 --;
dir = -dir;
ang += dir;
}
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
invalidate();
mHandler.sendEmptyMessageDelayed(0,10);
}
};
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
an1 = -15;
an2 = 15;
if(dir ==0)
dir = -dir;
}
return true;
}
}
}
일단 위에것이 책에서 본 대로 그대로 만든 소스코드인데요.
이해안가는 부분은
onDraw함수 안에 있는 RotateToy(); 함수 실행 방법입니다.
한번 클릭할때마다 RotateToy함수가 실행되서
ang += dir; 로 가겠지요? 근데 현재 dir= 10인데
if절 안에 조건에 해당이 안되는데 어떻게 잘 작동하고 있는건지
제가 어느부분을 놓치고 생각못한건지 잘 모르겠네요..
실행순서가 onTouchEvent -> onDraw -> RotateToy(); 이렇게 되는건가요..
실행은 잘되는데 어떻게 작동되고 있는지 그 원리를 모르겠습니다.
부탁드립니다!