안드로이드

안드로이드 선 그리기, FingerDraw, drawline, canvas, setOntTouchListener

알통몬_ 2018. 12. 11. 10:10
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 안드로이드 손가락으로 라인그리기? 예제입니다.


아주 간단하게 만들어봤습니다.

사용된 클래스

DrawLineView : View 를 상속받은 커스텀 클래스

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

public class DrawLineView extends View {

Paint paint;
float fromX, fromY, toX, toY;
int color;

public DrawLineView(Context context, float fromX, float fromY, float toX, float toY, int color) {
super(context);
this.fromX = fromX; // x좌표 시작점
this.fromY = fromY; // y좌표 시작점
this.toX = toX; // x좌표 끝점
this.toY = toY; // y좌표 끝점
this.color = color;
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND); // 아마도 선 양쪽 끝을 약간 둥글게?
paint.setStrokeWidth(10.0f); // 선 굵기
paint.setColor(color); // 선 색상
}

public DrawLineView(Context context) {
super(context);

}

public DrawLineView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}

public DrawLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(fromX, fromY, toX, toY, paint); // 선 그리는 부분

}
}

MainActivity

import android.databinding.DataBindingUtil;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

import superbrain.rowan.com.fingerdrawexample.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

ActivityMainBinding binding;
float mFromX, mFromY, mDuTX, mDuTY;
DrawLineView drawLineView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.drawingView.setOnTouchListener(draw);
}
View.OnTouchListener draw = (view, evt) -> {
switch (evt.getAction()) {
case MotionEvent.ACTION_DOWN:
mFromX = evt.getX();
mFromY = evt.getY();
break;
case MotionEvent.ACTION_MOVE:
mDuTX = evt.getX();
mDuTY = evt.getY();
if (mDuTX != 0 && mDuTY != 0) {
drawLineView = new DrawLineView(this, mFromX, mFromY, mDuTX, mDuTY, Color.BLACK);
binding.drawingView.addView(drawLineView, binding.drawingView.getLayoutParams());
mFromX = evt.getX();
mFromY = evt.getY();
}
break;
case MotionEvent.ACTION_UP:
break;
}
return view.performClick();
};

}

사용된 xml

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<android.support.v4.widget.DrawerLayout
android:id="@+id/drawingView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</android.support.constraint.ConstraintLayout>
</layout>


언제나 처럼 dataBinding 사용하였고, 자바 1.8도 추가해서 사용했습니다.

앱 레벨 build.gradle 파일에

android{} 블록 안에

dataBinding {
enabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

추가하시면 됩니다.

별로 어렵지 않은 내용입니다.

해보시면 쉽게 으용하실 수 있을거에요.

이상입니다. 감사합니다.

반응형