Android Studio를 활용한 안드로이드 프로그래밍 P364 직접 풀어보기 9-2


아래의 결과 화면 처럼 메뉴를 이용해 도형을 그리고 서브메뉴를 이용해 도형의 색깔을 선택되게 한다.


























<MainActivity 코드>

1. 도형을 그릴 때 초기 시작 값(도형)은 라인긋기로 되어있기 때문에 이를 이용해서 기본 색깔도 별도의 변수로 지정해줍니다.

2. onOptionsItemSelected 메소드 내부의 switch case문에 4~6번 case(색깔 선택)문을 추가해줍니다.

3. onDraw메소드에서 두개의 switch ~case문을 작성합니다. 하나는 도형, 나머지는 색깔에 관한 switch문입니다.

이 때 색깔선택switch문을 도형선택switch문 전에 작성해야합니다.

두 문장의 순서가 바뀔 시 paint 변수 선언(색깔 디폴트 값 :검정)-> 도형 그리기-> 색깔 선택-> paint변수 선언..........

식으로 이어지기 때문에 선택한 색깔로 바뀌지않고 검정색만 사용됩니다. 

즉, 색깔 선택-> 도형 선택으로 이어지게끔 색깔 선택 swith문을 먼저 수행하게 해야합니다.

package com.example.p364;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;

public class MainActivity extends AppCompatActivity {

final static int LINE=1, CIRCLE=2,RECT=3,color_RED=4,color_GREEN=5,color_BLUE=6;
//final => 상수의 의미
//static=> 전역의 의미
// final static => 전역 상수
int current_shape=LINE;//기본 값
int current_color=color_RED;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGraphicView(this));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0,1,0,"선 그리기");
menu.add(0,2,0,"원 그리기");
menu.add(0,3,0,"사각형 그리기");

SubMenu sub=menu.addSubMenu("색상 변경");
sub.add(0,4,0,"빨간색");
sub.add(0,5,0,"초록색");
sub.add(0,6,0,"파란색");
return true;
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {

switch(item.getItemId())
{
case 1:
current_shape=LINE;
break;
case 2:
current_shape=CIRCLE;
break;
case 3:
current_shape=RECT;
break;
case 4:
current_color=color_RED;
break;
case 5:
current_color=color_GREEN;
break;
case 6:
current_color=color_BLUE;
break;
}
return true;
}

private class MyGraphicView extends View {
int startX=-1,startY=-1,stopX=-1,stopY=-1;
public MyGraphicView(Context context) {
super(context);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
startX=(int)event.getX();
startY=(int)event.getY();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_MOVE:
stopX=(int)event.getX();
stopY=(int)event.getY();
this.invalidate();
break;
}

return true;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint();
paint.setStrokeWidth(10);
paint.setStyle(Paint.Style.STROKE);

switch(current_shape)
{
case LINE:
canvas.drawLine(startX,startY,stopX,stopY,paint);
break;
case CIRCLE:
int radius=(int)Math.sqrt(Math.pow(stopX-startX,2)+Math.pow(stopY-startY,2));
canvas.drawCircle(startX,startY,radius,paint);
break;
case RECT:
canvas.drawRect(new Rect(startX,startY,stopX,stopY),paint);
break;

}
switch(current_color)
{
case color_RED:
paint.setColor(Color.RED);
break;
case color_GREEN:
paint.setColor(Color.GREEN);
break;
case color_BLUE:
paint.setColor(Color.BLUE);
break;
}
}
}
}















'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 9-3  (2) 2020.06.08
직접 풀어보기 9-1  (0) 2020.06.07
직접 풀어보기 8-2  (15) 2020.05.20
직접 풀어보기 8-1  (0) 2020.05.20
직접 풀어보기 7-3  (0) 2020.05.19

+ Recent posts