728x90
안드로이드 스튜디오로 그림판 만들기
코드
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/baseLayout"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#cccccc"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btnTh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="Thin"/>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnRed"
android:checked="true"
android:text="RED"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnGreen"
android:text="GREEN"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnBlue"
android:text="BLUE"/>
</RadioGroup>
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="CLEAR"/>
</LinearLayout>
<LinearLayout
android:id="@+id/paintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
MainActivity.java
package com.cookandroid.test;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
public class MainActivity extends AppCompatActivity {
private MyPaintView myView;
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("간단 그림판");
myView = new MyPaintView(this);
((LinearLayout) findViewById(R.id.paintLayout)).addView(myView);
((RadioGroup)findViewById(R.id.radioGroup)).setOnCheckedChangeListener(
new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
switch (checkedId) {
case R.id.btnRed:
myView.mPaint.setColor(Color.RED);
break;
case R.id.btnGreen:
myView.mPaint.setColor(Color.GREEN);
break;
case R.id.btnBlue:
myView.mPaint.setColor(Color.BLUE);
break;
}
}
});
Button btnTh = findViewById(R.id.btnTh);
btnTh.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View view) {
if(count%2==1){
btnTh.setText("Thin");
myView.mPaint.setStrokeWidth(10);
count++;
} else {
btnTh.setText("Thick");
myView.mPaint.setStrokeWidth(20);
count++;
}
}
}));
((Button)findViewById(R.id.btnClear)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myView.mBitmap.eraseColor(Color.TRANSPARENT);
myView.invalidate();
}
});
}
private static class MyPaintView extends View {
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mPaint;
public MyPaintView(Context context) {
super(context);
mPath = new Path();
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(10);
mPaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, null); //지금까지 그려진 내용
canvas.drawPath(mPath, mPaint); //현재 그리고 있는 내용
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPath.reset();
mPath.moveTo(x, y);
break;
case MotionEvent.ACTION_MOVE:
mPath.lineTo(x, y);
break;
case MotionEvent.ACTION_UP:
mPath.lineTo(x, y);
mCanvas.drawPath(mPath, mPaint); //mBitmap 에 기록
mPath.reset();
break;
}
this.invalidate();
return true;
}
}
}
결과
728x90
'개발 > Android' 카테고리의 다른 글
[Android Studio] 간단 전화번호부 만들기 (0) | 2021.12.17 |
---|---|
[Android Studio] Layout 종류 (0) | 2021.11.16 |
[Android Studio] 계산기 만들기 (2) | 2021.10.07 |