앱개발 Q&A


앱개발 Q&A
앱 개발과 관련된 질문과 답을 쓰고 공유할 수 있는 곳입니다.
안드로이드 canvas그리기에서 질문입니다.
김영희
이미지 슬라이더 보기
기존에 등록되어있는 이미지가 있으면 불러와서 수정. 없으면 그냥 그림그리는 내용입니다.
기존에 등록되어있는 이미지가 없는경우 기능이 잘 돼고있습니다
그런데 기존에 등록되어있는 이미지가 있는경우 이미지 수정하다 지우개를 클릭한후 화면을 터치하면
기존에 그린 이미지가 화면에서 다 사라지고 다시펜을 클릭하고 화면을 터치하면 사라졌던 그림들이 다 나오고있습니다.
짐작으로는 onDraw랑 onTouchEvent쪽이 문제같은데 어떻게 하면될지 도움부탁드립니다 TT

*Activity.java

case R.id.btn_chart_eraser:
eraserSelected = true;
btn_chart_eraser.invalidate();
btn_chart_pen.invalidate();

oldColor = mColor;
oldSize = mSize;
mColor = Color.WHITE;
mSize = 50;
drawView.updatePaintProperty(mColor,mSize,false);
break;
case R.id.btn_chart_pen:
eraserSelected = false;
btn_chart_eraser.invalidate();
btn_chart_pen.invalidate();
mColor = oldColor;
mSize = oldSize;
drawView.updatePaintProperty(mColor,mSize,true);
break;


DrawView.java

public class DrawView extends View{

String Tag = "DrawVIew";

private Paint paint = new Paint();
private Path path = new Path();
private int paintColor=0xFF000000;
private int paintEraseColor=0xFFFFFF;

private Paint canvasPaint;
private Canvas drawCanvas;

private float mX, mY;
String fileName = "";
int mStrokeWidth = 1;
boolean mEraseMode = false;
private Bitmap canvasBitmap;

PorterDuffXfermode clear = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);

public DrawView(Context context, AttributeSet attrs){
super(context,attrs);
this.paint.setAntiAlias(true);
this.paint.setStrokeWidth(mStrokeWidth);
this.paint.setColor(paintColor);
this.paint.setStyle(Paint.Style.STROKE);
this.paint.setStrokeJoin(Paint.Join.ROUND);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh){
//view크기가 변경되었을때 호출
super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);
drawCanvas = new Canvas(canvasBitmap);
canvasPaint = new Paint(Paint.DITHER_FLAG);
}

@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
//view 핵심 영역
//실제로 화면을 그린다.
if("update".equals(Common.Update_Type) && !"".equals(Common.Update_Treat_Id) ){
Common.Update_Type = "edit";
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);

}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){
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);
Log.d(Tag,"status :: "+mEraseMode);
if(!"edit".equals(Common.Update_Type)){
if(mEraseMode){
path.reset();
}else{
path.reset();
}
}
break;
}
invalidate();
return true;
}

public void setColor(String newColor){
invalidate();
paintColor= Color.parseColor(newColor);
paint.setColor(paintColor);
}

// 초기화버튼 수정인경우 초기 서버에서 가져온 이미지를 다시 view
public void reset(){
if("edit".equals(Common.Update_Type)){
path.reset();
}else{
drawCanvas.drawColor(0,PorterDuff.Mode.CLEAR);
}

invalidate();
}

public void updatePaintProperty(int color, int size, boolean booleanValue){
paint.setColor(color);
paint.setStrokeWidth(size);
mEraseMode = booleanValue;
}
}
2018-01-29 18:05:17
218.152.156.***
덧글 0개 | 태그 0개
태그입력
쉽표(,)구분으로 한번에 여러 태그를 입력할수 있습니다
이름 비밀번호