그래서 저는 드로잉 앱에서이 이상한 문제에 직면하고 있습니다.안드로이드는 다른 경로의 상단에 경로를 그립니다.
이 선은 위에서 아래로 그리고 왼쪽에서 오른쪽으로 1에서 8까지 그렸습니다. 나는 선을 그리는거야 동안은 다른 모든 라인 뒤에 그리기 것 같은
, 그것은 보여줍니다. 화면에서 나가게 할 때마다 가끔이 튀어 나옵니다. 이것은 완전히 무작위로 보입니다.
나는 무엇보다 항상 다른 모든 것을 위에 그리는 것을 간과하고 있습니까?
내 DrawView.java :이처럼 내 MainActivity에 DrawView를 인스턴스화하고
public class DrawView extends View implements OnTouchListener {
private Path path = new Path();
private Paint paint = new Paint();
private Map<Path, Paint> pathMap = new HashMap<Path, Paint>();
private boolean isScreenCleared = false;
public DrawView(Context context) {
super(context);
this.setOnTouchListener(this);
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
}
@Override
public void onDraw(Canvas canvas) {
if (isScreenCleared) {
pathMap.clear();
canvas.drawColor(Color.WHITE);
isScreenCleared = false;
} else {
//Current line
canvas.drawPath(path, paint);
//All other lines
for (Map.Entry<Path, Paint> p : pathMap.entrySet()) {
canvas.drawPath(p.getKey(), p.getValue());
}
}
}
public boolean onTouch(View view, MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path = new Path();
path.reset();
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
Paint newPaint = new Paint();
newPaint.set(paint);
pathMap.put(path, newPaint);
break;
default:
return false;
}
invalidate();
return true;
}
public float getRadius() {
return paint.getStrokeWidth();
}
public void setRadius(float radius) {
paint.setStrokeWidth(radius);
}
public void setColor(int color) {
paint.setColor(color);
System.out.println("Color set to: " + color);
}
public void clearScreen() {
isScreenCleared = true;
invalidate();
}
}
:
Relative layout = (RelativeLayout) findViewById(R.id.drawscreen);
DrawView dv = new DrawView(layout.getContext());
표시하지 않은 것을 사용하지 않는 한 LinkedHashMap을 사용하는 것이 최상의 컨테이너 선택이 아닙니다. 그것은 벡터 또는 목록보다 무거운 컨테이너 또는 ... – spartygw