안드로이드

 

 

 

 

 

 

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);
        }

    }




}













 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

자연은 아이들이 어른이 되기 전에 어린이이기를 바라고 있다. 만약 이 순서가 바뀌면, 우리는 설익어서 맛이 없고, 금방 썩어버리는 설익은 과실이 된다. -루소

댓글 ( 4)

댓글 남기기

작성