DEVELOPMENT
[Android Studio] Chapter 9 직접 풀어보기
200%
2021. 7. 5. 18:22
[직접 풀어보기]
1
MainActivity.java
더보기
package com.cookandroid.a9_1;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGraphicView(this));
}
private static class MyGraphicView extends View{
public MyGraphicView(Context context){
super(context);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(80);
canvas.drawLine(100, 100, 1000, 100, paint);
paint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawLine(100, 230, 1000, 230, paint);
canvas.drawOval(250, 350, 900, 700, paint);
RectF rect = new RectF();
rect.set(200, 550, 600, 950);
canvas.drawArc(rect, 40, 110, true, paint);
paint.setColor(Color.BLUE);
rect.set(200, 1000, 600, 1400);
canvas.drawRect(rect, paint);
paint.setColor(Color.argb(150, 255, 0, 0));
rect.set(300, 1150, 700, 1550);
canvas.drawRect(rect, paint);
}
}
}
2
MainActivity.java
더보기
package com.cookandroid.project9_1;
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;
static int curShape = LINE;
final static int RED = 1, GREEN = 2, BLUE = 3;
static int curColor = RED;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGraphicView(this));
setTitle("간단 그림판");
}
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;
}
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case 1:
curShape = LINE;
return true;
case 2:
curShape = CIRCLE;
return true;
case 3:
curShape = RECT;
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);
}
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;
}
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(stopX-startY, 2));
canvas.drawCircle(startX,startY,radius,paint);
break;
case RECT:
Rect rect = new Rect(startX, startY, stopX, stopY);
canvas.drawRect(rect, paint);
break;
}
}
}}
3
activitiy_main.xml
더보기
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/iconLayout"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibZoomin"
android:src="@drawable/zoomin"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibZoomout"
android:src="@drawable/zoomo"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibRotate"
android:src="@drawable/rotate"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibBright"
android:src="@drawable/bright"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibDark"
android:src="@drawable/dark"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibBlur"
android:src="@drawable/b"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibEmboss"
android:src="@drawable/e"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="9"
android:gravity="center"
android:id="@+id/pictureLayout"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
MainActivity.java
더보기
package com.cookandroid.a9_3;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.EmbossMaskFilter;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
ImageButton ibZoomin, ibZoomout, ibRotate, ibBright, ibDark, ibBlur, ibEmboss;
MyGraphicView graphicView;
static float scaleX=1, scaleY=1;
static float angle=0;
static float satur=1;
static float blur=1, embo=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("미니 포토샵 (개선)");
LinearLayout pictureLayout = (LinearLayout) findViewById(R.id.pictureLayout);
graphicView = (MyGraphicView) new MyGraphicView(this);
pictureLayout.addView(graphicView);
clickIcons();
}
private static class MyGraphicView extends View {
public MyGraphicView(Context context){
super(context);
}
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
int cenX = this.getWidth()/2;
int cenY = this.getHeight()/2;
canvas.scale(scaleX, scaleY, cenX, cenY);
canvas.rotate(angle, cenX, cenY);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(satur);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
if (blur == 0){
BlurMaskFilter bMask = new BlurMaskFilter(50, BlurMaskFilter.Blur.NORMAL);
paint.setMaskFilter(bMask);}
if (embo == 0){
EmbossMaskFilter eMask = new EmbossMaskFilter(new float[] {3,3,3}, 0.5f, 5, 10);
paint.setMaskFilter(eMask);}
Bitmap picture = BitmapFactory.decodeResource(getResources(), R.drawable.a);
int picX = (this.getWidth()-picture.getWidth())/2;
int picY = (this.getHeight()-picture.getHeight())/2;
canvas.drawBitmap(picture, picX, picY, paint);
picture.recycle();
}
}
private void clickIcons(){
ibZoomin = (ImageButton) findViewById(R.id.ibZoomin);
ibZoomin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scaleX = scaleX + 0.2f;
scaleY = scaleY + 0.2f;
graphicView.invalidate();
}
});
ibZoomout = (ImageButton) findViewById(R.id.ibZoomout);
ibZoomout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scaleX = scaleX - 0.2f;
scaleY = scaleY - 0.2f;
graphicView.invalidate();
}
});
ibRotate = (ImageButton) findViewById(R.id.ibRotate);
ibRotate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
angle = angle + 20;
graphicView.invalidate();
}
});
ibBright = (ImageButton) findViewById(R.id.ibBright);
ibBright.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
satur = satur + 0.2f;
graphicView.invalidate();
}
});
ibDark = (ImageButton) findViewById(R.id.ibDark);
ibDark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
satur = satur - 0.2f;
graphicView.invalidate();
}
});
ibBlur = (ImageButton) findViewById(R.id.ibBlur);
ibBlur.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (blur == 0) blur = 1;
else blur = 0;
graphicView.invalidate();
}
});
ibEmboss = (ImageButton) findViewById(R.id.ibEmboss);
ibEmboss.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (embo == 0) embo = 1;
else embo = 0;
graphicView.invalidate();
}
});
}
}