안드로이드 개발 질문/답변
(글 수 45,052)
레이아웃이 회색 전체 화면으로 자리잡고 터치로 선을그을 수 있는 간단한 그림판 소스입니다
버튼을 그림판 상에 던지 아니면 그림판 아래를 잘라내어 그밑에 위치시키던지 하고싶은데
잘 모르겠습니다 도와주세요 ㅠ
package my.app;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class draw extends Activity {
private MyView vw;
private ArrayList<Vertex> lists;
private MyView vw;
private ArrayList<Vertex> lists;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vw = new MyView(this);
setContentView(vw);
lists = new ArrayList<draw.Vertex>();
setContentView(vw);
lists = new ArrayList<draw.Vertex>();
Button btn = new Button(this);
btn.setText("ok");
}
btn.setText("ok");
}
public class Vertex { // 찍힌 점에 좌표를 리스트에저장해주기 위한 클래스
float x, y;
boolean draw;
float x, y;
boolean draw;
public Vertex(float x, float y, boolean draw) { // draw 이동 여부값을 저장
this.x = x;
this.y = y;
this.draw = draw;
}
}
this.x = x;
this.y = y;
this.draw = draw;
}
}
protected class MyView extends View {
Paint paint; // 화면단 출력에 대한 기본적 정보를 저장하는 객체
public MyView(Context context) {
super(context);
super(context);
paint = new Paint();
paint.setColor(Color.BLACK); // 선 색
paint.setStrokeWidth(6); // 선에 두께
paint.setAntiAlias(true); // 선을 부드럽게 처리
}
paint.setColor(Color.BLACK); // 선 색
paint.setStrokeWidth(6); // 선에 두께
paint.setAntiAlias(true); // 선을 부드럽게 처리
}
@Override
// 프로그램 실행과 동시에 호출, 무효화에서 벗어나는 시점에 호출
protected void onDraw(Canvas canvas) { // canvas 그림을 그리는 영역
canvas.drawColor(0xffe0e0e0); // canvas의 색 지정
// 정점을 순회 하면서 선을 그린다.
for (int i = 1; i < lists.size(); i++) {
if (lists.get(i).draw) {
canvas.drawLine(lists.get(i - 1).x, lists.get(i - 1).y,
lists.get(i).x, lists.get(i).y, paint);
}
}
}
for (int i = 1; i < lists.size(); i++) {
if (lists.get(i).draw) {
canvas.drawLine(lists.get(i - 1).x, lists.get(i - 1).y,
lists.get(i).x, lists.get(i).y, paint);
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
public boolean onTouchEvent(MotionEvent event) {
// 터치 이동시쟁점을 추가
if (event.getAction() == MotionEvent.ACTION_DOWN) {
lists.add(new Vertex(event.getX(), event.getY(), false));
return true;
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
lists.add(new Vertex(event.getX(), event.getY(), true));
invalidate(); // 화면 갱신 메소드 호출 _ 작업영역에 무효화 = onDraw 호출
return true;
}
if(event.getAction()==MotionEvent.EDGE_LEFT){
lists = null;
}
return false; // 키보드에 대한 이벤트가 dwon이나 move가 아니면 화면상 변화가 없게 된다.
}
}
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
lists.add(new Vertex(event.getX(), event.getY(), false));
return true;
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
lists.add(new Vertex(event.getX(), event.getY(), true));
invalidate(); // 화면 갱신 메소드 호출 _ 작업영역에 무효화 = onDraw 호출
return true;
}
if(event.getAction()==MotionEvent.EDGE_LEFT){
lists = null;
}
return false; // 키보드에 대한 이벤트가 dwon이나 move가 아니면 화면상 변화가 없게 된다.
}
}
}



