Как перемещать ShapeDrawable в Canvas на событиях касания

Я пытаюсь реализовать приложение для рисования в Android. Где пользователь должен иметь возможность выбирать и перемещать рисованные фигуры.
В настоящее время я статически нарисовал некоторые прямоугольники и текст на моем чертежном холсте:

View mDrawingCanvas = new View(mContext) { ShapeDrawable rectangle; @Override public boolean isFocused() { // TODO Auto-generated method stub Log.d(TAG, "View's On focused is called !"); return super.isFocused(); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.onTouchEvent(event); } @Override protected void onDraw(final Canvas canvas) { super.onDraw(canvas); // Work out current total scale factor // from source to view final float scale = mSourceScale*(float)getWidth()/(float)mSize.x; Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.WHITE); //Custom View rectangle = new ShapeDrawable(new RectShape()); rectangle.getPaint().setColor(Color.GRAY); rectangle.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); rectangle.getPaint().setStrokeWidth(3); rectangle.setBounds((int)(50*scale), (int)(30*scale), (int)(200*scale), (int)(150*scale)); rectangle.draw(canvas); rectangle.getPaint().setColor(Color.BLUE); rectangle.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); rectangle.getPaint().setStrokeWidth(3); rectangle.setBounds((int)(200*scale), (int)(200*scale), (int)(400*scale), (int)(350*scale)); rectangle.draw(canvas); } }; 

Я хочу выбрать (нарисовать границы на выбранной фигуре) и переместить вытянутые фигуры в события onTouch на холсте рисования.
Может кто-нибудь, пожалуйста, расскажите мне об этом, любая помощь высоко оценена.

Этот ответ продемонстрировал методологию перемещения фигур, которую я искал.
И моя проблема решена сейчас. Ссылка есть:
Перетащите и передвиньте круг, нарисованный на холсте.

Вы должны сохранять позиции X и Y в событии касания и использовать их при рисовании фигур. Ниже приведен очень простой пример того, как это сделать, но вам нужно его улучшить (проверьте, находится ли касание внутри объекта и только измените значения для этого объекта)

Пример:

 public class DrawTest extends View { private static final String TAG = "Desenho"; private ShapeDrawable rectangle; private Paint paint; private float currX, currY; private Rect blue, gray; public DrawTest(Context context) { super(context); currX = 1; currY = 1; gray = new Rect(50,30,200,150); blue = new Rect(200,200,400,350); paint = new Paint(); rectangle = new ShapeDrawable(new RectShape()); } @Override public boolean isFocused() { Log.d(TAG, "View's On focused is called !"); return super.isFocused(); } @Override public boolean onTouchEvent(MotionEvent event) { currX = event.getX(); currY = event.getY(); invalidate(); Log.d(TAG, "View's On touch is called! X= "+currX + ", Y= "+currY); return super.onTouchEvent(event); } @Override protected void onDraw(final Canvas canvas) { super.onDraw(canvas); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.WHITE); //Custom View rectangle.getPaint().setColor(Color.GRAY); rectangle.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); rectangle.getPaint().setStrokeWidth(3); gray.set((int)(50+currX), (int)(30+currY), (int)(200+currX), (int)(150+currY)); rectangle.setBounds(gray); gray = rectangle.getBounds(); rectangle.draw(canvas); rectangle.getPaint().setColor(Color.BLUE); rectangle.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); rectangle.getPaint().setStrokeWidth(3); blue.set((int)(200+currX), (int)(200+currY), (int)(400+currX), (int)(350+currY)); rectangle.setBounds(blue); blue = rectangle.getBounds(); rectangle.draw(canvas); } }