반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- dictionary
- github
- remote config
- 다크모드
- WebView
- Android
- autolayout
- SwiftUI
- RxSwift
- ios
- Firebase
- NavigationLink
- 웹뷰
- Observable
- LazyHStack
- Apple
- UIScrollView
- swipe
- UITabBarController
- SwiftLint
- Alamofire
- UIButton
- gcd
- Swift
- 라이트모드
- string
- Realtime Database
- 문자열
- subscript
- Java
Archives
- Today
- Total
점진적 과부하 개발 블로그
Android 13주차 Graphic 본문
반응형
onDraw
- onDraw
package com.induk;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class MyView extends View {
public MyView(Context context) {
super(context);
setBackgroundColor(Color.BLUE);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.YELLOW);
paint.setStrokeWidth(20); // 외곽 두께
paint.setTextSize(50);
canvas.drawCircle(300, 500, 100, paint);
}
}
- multiLines
package com.induk;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.View;
public class MyView extends View {
public MyView(Context context) {
super(context);
setBackgroundColor(Color.BLUE);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.YELLOW);
paint.setStrokeWidth(20); // 외곽 두께
paint.setTextSize(50);
float[] pts = {30, 120, 120, 220, 120, 220, 180, 50, 180, 50, 400, 400 };
canvas.drawLines(pts, paint);
}
}
- xml 사용
package com.induk;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class MyView extends View {
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setBackgroundColor(Color.YELLOW);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(20);
canvas.drawArc(new RectF(30, 50, 600, 600), 120, 270, true, paint);
}
}
- 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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5sp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#0000FF"
android:text="컨텍스트 메뉴를 이용하여 도형그리기"/>
<EditText
android:id="@+id/edtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:inputType="number"
android:textColor="#FFFFFF"
android:gravity="center"
android:background="@drawable/border"
android:layout_marginLeft="10sp"
android:layout_marginRight="10sp"
android:text="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text=""/>
</LinearLayout>
<com.induk.MyView
android:id="@+id/vCanvas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5sp"/>
</LinearLayout>
컨텍스트 메뉴를 이용하여 도형 그리기
- Main
package com.induk;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private MyView myView;
private EditText edtCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myView = (MyView) findViewById(R.id.vCanvas);
edtCount = (EditText) findViewById(R.id.edtCount);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
myView.setting(item.getItemId(), Integer.parseInt(edtCount.getText().toString()));
myView.invalidate(); // ***
return true;
default:
return super.onContextItemSelected(item);
}
}
}
- 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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5sp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#0000FF"
android:text="컨텍스트 메뉴를 이용하여 도형그리기"/>
<EditText
android:id="@+id/edtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:inputType="number"
android:textColor="#FFFFFF"
android:gravity="center"
android:background="@drawable/border"
android:layout_marginLeft="10sp"
android:layout_marginRight="10sp"
android:text="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text=""/>
</LinearLayout>
<com.induk.MyView
android:id="@+id/vCanvas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5sp"/>
</LinearLayout>
- border
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:thickness="0sp">
<size android:width="30sp"/>
<solid android:color="#0000ff"/>
</shape>
- MyView
package com.induk;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.View;
import androidx.annotation.Nullable;
public class MyView extends View {
private int count;
private int what;
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setBackgroundColor(Color.YELLOW);
setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
contextMenu.setHeaderTitle("도형선택");
contextMenu.add(0, 1, 0, "선");
contextMenu.add(0, 2, 0, "면");
contextMenu.add(0, 3, 0, "원");
contextMenu.add(0, 4, 0, "타원");
contextMenu.add(0, 5, 0, "부채꼴");
contextMenu.add(0, 6, 0, "텍스트");
}
});
}
public void setting(int w, int c) {
what = w;
count = c;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(100);
paint.setStrokeWidth(20);
switch(what) {
case 1:
for (int ii=0; ii < count; ii++) {
canvas.drawLine(100, 100 + (50 * ii), 600, 100 + (50 * ii), paint);
}
break;
case 3:
for (int ii=0; ii < count; ii++) {
canvas.drawCircle(300 + (150 * ii), 500, 100, paint);
}
break;
default:
break;
}
}
}
반응형
'Android > Java' 카테고리의 다른 글
Android Splash Screen 화면 구현 (0) | 2022.06.05 |
---|---|
Android Toast & Snackbar (0) | 2022.04.19 |