일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- html
- DoitSQL입문
- 웹 브라우저 전쟁
- 키-값 데이터베이스
- 함수 선언
- SQL
- 배열 3요소
- 예제
- 웹브라우저 수용도
- HTML역사
- 자바 오류
- 크롤링 오류
- R1C3
- 생성자
- SQL입문
- 데이터베이스
- 함수
- 자바
- 예외
- 우아한테크
- 크롤링
- 자바 예외
- 숫자 형식
- DoitSQL
- 숫자형식오류
- dbms
- Doit입문SQL
- 페이지분석
- DoIt
- 배열 예제
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- html
- DoitSQL입문
- 웹 브라우저 전쟁
- 키-값 데이터베이스
- 함수 선언
- SQL
- 배열 3요소
- 예제
- 웹브라우저 수용도
- HTML역사
- 자바 오류
- 크롤링 오류
- R1C3
- 생성자
- SQL입문
- 데이터베이스
- 함수
- 자바
- 예외
- 우아한테크
- 크롤링
- 자바 예외
- 숫자 형식
- DoitSQL
- 숫자형식오류
- dbms
- Doit입문SQL
- 페이지분석
- DoIt
- 배열 예제
Archives
- Today
- Total
프로그래밍
[안드로이드 자바] 간단한 그림판 만들기(onDraw(), onTouchEvent) 본문
728x90
반응형
디자인
프로젝트 설명
메뉴에서 선, 원, 사각형 형태를 선택할 수 있다.
메뉴에서 색상(빨강, 파랑, 초록)을 선택할 수 있다.
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
java
package com.sample.graphicdraw;
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.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;
import static android.graphics.Color.BLUE;
import static android.graphics.Color.GREEN;
import static android.graphics.Color.RED;
public class MainActivity extends AppCompatActivity {
final static int LINE = 1, CIRCLE=2, RECTANGLE = 3;
static int curShape=LINE;
static int curColor = Color.DKGRAY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGraphicView(this));
setTitle("간단 그림판");
}
@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 sMenu = menu.addSubMenu("색상변경>>");
sMenu.add(0,4,0, "빨강");
sMenu.add(0,5,0, "초록");
sMenu.add(0,6,0, "파랑");
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case 1: curShape=LINE; return true;
case 2: curShape=CIRCLE; return true;
case 3: curShape=RECTANGLE; return true;
case 4: curColor = RED; return true;
case 5: curColor = GREEN; return true;
case 6: curColor = BLUE; return true;
}
return super.onOptionsItemSelected(item);
}
private static 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_MOVE:
case MotionEvent.ACTION_UP:
stopX = (int) event.getX();
stopY = (int) event.getY();
this.invalidate();
break;
}
return true; // super.onTouchEvent(event);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
switch (curColor) {
case RED:
paint.setColor(Color.RED);
break;
case GREEN:
paint.setColor(Color.GREEN);
break;
case BLUE:
paint.setColor(Color.BLUE);
break;
}
switch (curShape) {
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 RECTANGLE:
Rect rect = new Rect(startX, startY, stopX, stopY);
canvas.drawRect(rect,paint);
break;
}
}
}
}
728x90
반응형
'안드로이드 > 안드로이드 스튜디오' 카테고리의 다른 글
[Do it! 안드로이드 앱] 자바) 시크바와 프로그레스바 보여주기 (0) | 2022.05.18 |
---|---|
[안드로이드 자바] 미니 포토샵 앱 만들기(ImageButton, 줌인, 줌아웃, 회전, 밝게, 어둡게, 블러, 엠보싱) (0) | 2022.05.17 |
[안드로이드 자바] 저장소 접근하여 이미지뷰어 만들기(ExternalStorageDirectory) (0) | 2022.05.17 |
[안드로이드 자바] 이미지 변경, 각도 회전 메뉴없이 자바코드만으로 구현하기(menu, setRotation, setGroupCheckable) (0) | 2022.05.17 |
[안드로이드 자바] 메뉴를 이용한 이미지 변경, 이미지 회전(Menu, setRotation) (0) | 2022.05.17 |
Comments