안드로이드 간단한 그림판 만들기
안녕하세요!! @wonnieyoon입니다.
@dayoung님께서 예쁜 대문을 만들어 주셔서 앞으로는
이 대문만 사용할것 같네요 ㅎㅎ@dayoung님 다시 한번 감사합니다.
다들 그림판 한번씩 사용해보셨을꺼에요. 오늘은 윈도우 그림판이 아닌 그림판 앱을 만들어 볼 생각입니다.
간단하게 만들기 때문에 다양한 기능이 들어가진 않지만 오늘 만든것에서 필요한 기능을 하나씩 넣으시면서 앱을 크게 만들어나가면 될거에요.
코드
public class MainActivity extends AppCompatActivity {
class Point{
float x;
float y;
boolean check;
int color;
public Point(float x, float y, boolean check,int color)
{
this.x = x;
this.y = y;
this.check = check;
this.color = color;
}
}
class MyView extends View
{
public MyView(Context context) { super(context); }
@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
p.setStrokeWidth(15);
for(int i=1 ; i<points.size() ; i++)
{
p.setColor(points.get(i).color);
if(!points.get(i).check)
continue;
canvas.drawLine(points.get(i-1).x,points.get(i-1).y,points.get(i).x,points.get(i).y,p);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
points.add(new Point(x,y,false , color));
case MotionEvent.ACTION_MOVE :
points.add(new Point(x,y,true , color));
break;
case MotionEvent.ACTION_UP :
break;
}
invalidate();
return true;
}
}
ArrayList<Point> points = new ArrayList<Point>();
Button draw_red_btn,draw_blue_btn,draw_black_btn,clearbtn;
LinearLayout drawlinear;
int color = Color.BLACK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MyView m = new MyView(this);
/* ----- 색 변경 ------ */
findViewById(R.id.draw_red_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
color = Color.RED ;
}
});
findViewById(R.id.draw_blue_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
color = Color.BLUE ;
}
});
findViewById(R.id.draw_black_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
color = Color.BLACK ;
}
});
clearbtn = findViewById(R.id.clear_btn);
drawlinear = findViewById(R.id.draw_linear);
clearbtn.setOnClickListener(new View.OnClickListener() { //지우기 버튼 눌렸을때
@Override
public void onClick(View v){
points.clear();
m.invalidate();
}
});
drawlinear.addView(m);
}
}
결과
간단하게 그리는 기능과 지우기 기능만 넣었습니다.
이 앱의 핵심은 선을 그릴때 끊기지 않고 계속해서
부드럽게 그리는 방법입니다.
코드를 보시면 아시겠지만 선을 부드럽게 그리기 위해서는 터치를 하는 시점과 터치를 하고나서 움직이는 시점을 판단할수 있는 부분이 들어가야 합니다.
처음 하시면 단순해 보이지만 결코 쉬운것이 아니란것을 알게 될것입니다
post which is very useful for us all. thank you for sharing for knowledge. congratulations for your success is always a friend.
혹시 그 클래스 안에 @Override가 주석으로 표현된건가요?
아니면 실제로 오버라이딩 할려면 저렇게 사용하는건가요..?
아니면.. 함수 이름?
@Override는 콜백메소드라고 불리며 자동완성기능을 이용하면 @Override가 붙습니다.
아하 그렇군요! 답변 감사합니다 : )
@가 들어간건 어노테이션으로 자바에서 이용하는 메타 프로그래밍으로 콜백 이랑은 상관없죠..
네 맞아요. 지적해주셔서 감사합니다. 잠깐 착각을 했었네요
가상화폐 평가에서 스팀이 B-래요! (5위)
^^
좋은 컨텐츠가 즐거운 스티밋을 만드는거 아시죠?
그림만은 간단해 보이는데, 많은 logic 이 들어가는 작업 이군요. 그림판 , 기대하겠습니다! 어릴적에는 이것만 썼었는데요..
어떤 프로그램이든 단순해 보여도 많은 logic이 들어가기 마련입니다.
안드로이드도 하시나 보네요! 저는 지금 자바도... ㅎㅎㅎ 못 떼서 자바 인강 보고 있는데 저도 얼른 마치고 안드로이드 공부하고 싶네요! 나중에 된다면 그림판 소스도 보면서 여러 가지를 알고 싶어요 :) 오늘 많이 춥다고 해요! 나가실 때 따뜻하게 입고 나가시고 좋은 하루 되세요!
하나씩 천천히 하시면 되요