У меня есть собственный вид рисования, в котором я рисую линии на основе моего щелчка и координат перемещения. Этот настраиваемый вид добавляется к моей основной деятельности, где я могу изменить ширину обводки объекта рисования в пользовательском представлении. Я сохраняю текущую ширину штриха в статическом классе. В методе onDraw() я хочу перерисовать старые пути со старой шириной обводки, которую я могу рисовать с разной шириной, но это всегда текущая заданная ширина обводки.
Основная деятельность:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
if (position == 0) {
Memory.setStrokeWidth(10); //Set stroke width in static class
}
if (position == 1) {
Memory.setStrokeWidth(25);
}
if (position == 2) {
Memory.setStrokeWidth(40);
}
}
Пользовательский вид рисования:
private Paint paint;
private Path path;
private HashMap<Path, Float> strokeWidthMemory;
@Override
protected void onDraw(Canvas canvas) {
paint.setStrokeWidth(Memory.getStrokeWidth());
canvas.drawPath(path, paint);
strokeWidthMemory.put(path, paint.getStrokeWidth()); //Save drawn path with stroke width in HashMap
//Redraw old lines with stored stroke width
for (Path p : strokeWidthMemory.keySet()) {
paint.setStrokeWidth(strokeWidthMemory.get(p));
canvas.drawPath(p, paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Get the coordinates of the touch event.
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Set a new starting point
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
// Connect the points
path.lineTo(eventX, eventY);
break;
default:
return false;
}
// Makes our view repaint and call onDraw
invalidate();
return true;
}