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

서버에서 가져온 이미지를 화면에 뿌린후 수정

0 추천

서버에 이미지가 있으면 이미지를 가져와 화면에 뿌려준다음 이미지에서 수정작업을 할수있게 할려합니다.

그런데 onTouchEvent의 invalidate() 때문인지 터치하여 선을 긋고 터치를 때면 그었던 선이 사라져

처음 서버에서 가져온 이미지로 돌아갑니다...

방법좀 알려주세요 TT

 

@Override
    protected void onDraw(Canvas canvas){
        //view 핵심 영역
        //실제로 화면을 그린다.
        if(!"".equals(Common.Update_Treat_Id) && !"".equals(Common.Update_FIle_Name)){
            Thread mThread = new Thread(){
                @Override
                public void run(){
                    try{

                        URL url = new URL(Common.Update_File_Url+Common.Update_Chart_Id+"/"+Common.Update_Treat_Id+"/"+Common.Update_FIle_Name.split("#")[0]);
                        Log.d(Tag, "url :: "+url);
                        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                        conn.setDoInput(true);
                        conn.connect();
                        InputStream is = conn.getInputStream();
                        canvasBitmap  = BitmapFactory.decodeStream(is);
                    }catch (Exception e){
                        Log.d(Tag, "Exception connect :: "+e.getMessage());
                    }
                }
            };
            mThread.start();

            try{
                mThread.join();
                canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
                canvas.drawPath(path, paint);
                Common.Update_Treat_Id = "";
            }catch (Exception e){
                Log.d(Tag, "Exception canvas.drawBitmap :: "+e.getMessage());
            }
        }else{
            canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
            canvas.drawPath(path, paint);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event){
        //touch에 대한 listener 함수
        //detect user touch
        float touchX = event.getX();
        float touchY = event.getY();

        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
                path.moveTo(touchX, touchY);
                break;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(touchX, touchY);
                break;
            case MotionEvent.ACTION_UP:
                drawCanvas.drawPath(path, paint);
                path.reset();
                break;
            default:
                return false;
        }
        invalidate();
        return true;
    }

 

REDORI (350 포인트) 님이 2018년 1월 25일 질문
REDORI님이 2018년 1월 25일 수정

1개의 답변

0 추천
마지막 Action_UP, 터치를 떼는 시점에, path를 리셋하고 invalidate를 하기 때문에,

path 정보가 모두 사라지면서 그려지고 있던 선이 사라진 것으로 보여집니다~

그러므로 path를 하나로 잡지마시고, 그릴때마다 path를 생성해서 onDraw시에 모두 그리는 식으로 구현하셔야 할 것 같습니다.
익명사용자 님이 2018년 1월 25일 답변
그런데 서버에서 이미지를 불러오지않은상태로 그릴때는 잘 그러지는데 왜 이미지를 불러온 상태에서 그릴때만 그럴까요 TT
...