마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 그림판이 구현중 선이 끊겨요 [closed]

0 추천

안드로이드 그림판 구현중 선 굵기를 크게하면 끊겨져 보이는데 

이유는 무엇이고 해결방법은 무엇일까여?

import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.flask.colorpicker.ColorPickerView;
import com.flask.colorpicker.OnColorSelectedListener;
import com.flask.colorpicker.builder.ColorPickerClickListener;
import com.flask.colorpicker.builder.ColorPickerDialogBuilder;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
int a=0;
    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.setStyle(Paint.Style.FILL_AND_STROKE);
            p.setStrokeWidth(30);
            p.setAntiAlias(true);

            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:
                    Log.d(String.valueOf(x)+String.valueOf(y), "x,y의 좌표의값 ");
                    points.add(new Point(x+1,y+1,false , color));

                case MotionEvent.ACTION_MOVE :
                    Log.d(String.valueOf(x)+String.valueOf(y), "x,y의 좌표의값 ");
                    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;
    ConstraintLayout draw_linearo;
    @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 ;
                for (int i = 0; i < points.size(); i++) {
                    Log.d(String.valueOf(points.get(i).x), "포인트의 값");
                }
            }
        });

//        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);
        draw_linearo = findViewById(R.id.draw_linearo);
        drawlinear = findViewById(R.id.draw_linear);
//        clearbtn.setOnClickListener(new View.OnClickListener() { //지우기 버튼 눌렸을때
//            @Override
//            public void onClick(View v){
//                points.clear();
//                m.invalidate();
//            }
//        });

        draw_linearo.addView(m);
    }
}
 
다음 질문과 중복으로 종료됨: 안드로이드 그림판 곡선 끊김
dosona (470 포인트) 님이 2018년 4월 12일 질문
dosona님이 2018년 4월 12일 closed
...