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

paint 선 색바꾸기 (그림판 관련)

0 추천

안녕하세요.

현재 그림판을 만들고 있는 중인데 paint.setcolor를 사용하여 색을 선택하고 드래그하여 그리려고 합니다.

현재 문제는 선택후 그리기를 하면 이전에 그려진 것들도 모두 색이 변해버립니다.

배열에 넣어서 사용하면 된다는 말을 들어서 해보았는데도 아직 정확하게 갈피를 못잡고 있습니다...

어떤 방법이 있는지 도움 부탁드립니다.

 

 

 

 

 

public class Paint_Page extends ActionBarActivity {

    MyView m;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        m = new MyView(Paint_Page.this);
        linearLayout.addView(m);
        setContentView(linearLayout);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.actionbar, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if(id == R.id.red_button){
            m.setRed();
        }else if(id == R.id.black_button){
            m.setBlack();
        }

        return super.onOptionsItemSelected(item);
    }
}



class MyView extends View{

    ArrayList<Paint> arr_paint = new ArrayList<Paint>();
    ArrayList<Path> arr_path = new ArrayList<Path>();
    int i=0;
    Paint paint = new Paint();
    Path path = new Path();

    public MyView(Context context) {
        super(context);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(10f);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        arr_path.add(i, path);
        arr_paint.add(i, paint);
        
        canvas.drawPath(arr_path.get(i), arr_paint.get(i));

        i++;
    }

    public void setBlack(){
        paint.setColor(Color.BLACK);
    }

    public void setRed(){
        paint.setColor(Color.RED);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN :
                path.moveTo(x, y);
                break;
            case MotionEvent.ACTION_MOVE :
                path.lineTo(x, y);
                break;
            case MotionEvent.ACTION_UP :
                break;
        }

        invalidate();

        return true;
    }
}

 

대화니 (1,120 포인트) 님이 2016년 7월 20일 질문

1개의 답변

0 추천
paint/path 객체를 한개 더 만들어서 onDraw시 그 객체로도 그리게 해 주셔야 합니다.
익명사용자 님이 2016년 7월 20일 답변
객체를 하나 더 만들라는 말이 잘 이해가 안됩니다...

선을 선택할 때 객체를 계속 생성하라는 말이신지...

객체를 하나 더 만들어도 선을 선택하면 증상을 똑같지 않을까요?

어느 부분에서 객체를 만들어야하는지 질문드립니다ㅠㅠ
...