class ShapeActivity
package com.example.choi.ex07_graphic;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import java.util.Random;
public class ShapeActivity extends AppCompatActivity {
//변수
int x=50, y=50; //원의 중심 좌표
int width, height; //화면의 가로, 세로 길이
int moveX=5, moveY=10;
int red, green, blue, alpha;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//xml 이 아닌 코드를 사용한 뷰(커스텀뷰)
setContentView(new MyView(this));
}
//내부 클래스
class MyView extends View implements Runnable{
//Alt + Insert , 생성자 추가
public MyView(Context context) {
super(context);
//백그라운드 스레드 생성
Thread th=new Thread(this);
th.start();
}
//화면출력
@Override
protected void onDraw(Canvas canvas) {
//canvas :도화지 역할(바탕화면)
canvas.drawColor(Color.LTGRAY);//바탕화면 색상
//Paint :붓 역할
Paint p=new Paint();
//alpha(투명도) 0 완전투명도, 255 완전 불투명도
//Color.argb(투명도, red, green,blue)
//p.setColor(Color.argb(255, red, green,blue));
p.setARGB( 255 ,red, green, blue);
// p.setColor(Color.GREEN); //색상 설정
//캔버스에 원 그리기 (x, y, width, paint)
canvas.drawCircle(x, y, 20, p);
//사각형 그리기 (x1, y1, x2, y2, 페이트)
// canvas.drawRect(200, 200, 300, 300, p);
}
//Alt+Insert , Implement Methods
//백그라운드 작업(좌표값을 변경, 그래픽 갱신 요청)
@Override
public void run() {
while (true){
//x, y좌표 변경 구의 반지름 길이 20
//좌우 벽처리
if(x > (width-20) || x <20){
moveX =-moveX;
setColor();
}
//상하 벽처리
if(y > (height-20) || y <20){
moveY =-moveY;
setColor();
}
//x, y 좌표 변경
x +=moveX;
y +=moveY;
try{
Thread.sleep(30);
}catch (Exception e){
e.printStackTrace();
}
//그래픽 갱신 요청(onDraw() 가 호출됨)
postInvalidate();
}
}
//뷰의 사이즈가 변경될 때 호출
//최초 뷰가 출력될 때, 폰의 가로/세로 방향이 바뀔 때
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
//폰의 가로, 세로 사이즈 계산
width=getWidth();
height=getHeight();
}
void setColor(){
Random rand =new Random();
//랜덤객체.nextInt(숫자) 0 ~ 숫자 -1 사이의 난수 발생
alpha =rand.nextInt(256); //0~255
red =rand.nextInt(256);
green=rand.nextInt(256);
blue=rand.nextInt(256);
}
}
}
댓글 ( 4)
댓글 남기기