2016-06-20 2 views
2

Так что я использую onDraw в обычном классе View для рисования фигур на RelativeLayout + TableLayout все, что отлично работает, и у меня есть другой класс, который я использую для рисования линий от точки A до точки B и т. Д. ниже:Холст; Как удалить фигуры ретроактивно

enter image description here

Моя цель:

Если я тащу мой палец от точки А (Objecta) в точку Б (objectB), как я могу удалить эти 2 Просмотр объектов из холста? Я добавил метод:

objectA.delete(); 
objectB.delete(); 

, которые должны удалить как A и B, когда я тащу свой палец через MotionEvent, но она удаляет только один, а не другой, так что я имею в виду, что это не имеет обратной силы?

кода ниже:

switch (event.getAction()) { 
case MotionEvent.ACTION_DOWN: 
    /// get the child that corresponds to the first touch 
    DotView objectA = getChildForTouch((TableLayout) v, x, y); 

    return true; 
case MotionEvent.ACTION_MOVE: 

///used the x - y to get the object for every other shape the user`S finger passes over. 
DotView objectB = getChildForTouch((TableLayout) v, x, y); 


    /// just update positions 
    line.setCoords(mStartX, mStartY, (int) x, (int) y); 

objectA.delete(); ///Delete first shape 
objectB.delete(); ///Delete second shape 

break; 

case MotionEvent.ACTION_UP: 
    ///Gets the last shape where the user released their fingers 
    endView = getChildForTouch((TableLayout) v, x, y); 
break; 

Удалить метод внутри: DotView extends View класса:

private static class DotView extends View { 

     private static final int DEFAULT_SIZE = 100; 
     private Paint mPaint = new Paint(); 
     private Rect mBorderRect = new Rect(); 
     private Paint mCirclePaint = new Paint(); 
     private int mRadius = DEFAULT_SIZE/4; 

     public DotView(Context context) { 
      super(context); 
      mPaint.setStrokeWidth(2.0f); 
      mPaint.setStyle(Style.STROKE); 
      mPaint.setColor(Color.RED); 
      mCirclePaint.setColor(Color.CYAN); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
      canvas.drawColor(Color.parseColor("#0099cc")); 
      mBorderRect.left = 0; 
      mBorderRect.top = 0; 
      mBorderRect.right = getMeasuredWidth(); 
      mBorderRect.bottom = getMeasuredHeight(); 
      canvas.drawRect(mBorderRect, mPaint); 
      canvas.drawCircle(getMeasuredWidth()/2, getMeasuredHeight()/2, 
        mRadius, mCirclePaint); 
     } 


     public void delete(){ 
     mPaint.setColor(Color.TRANSPARENT); 
     } 

    } 

Просто что-то просто подделать удалить кружки

Заранее спасибо ребят .. больше при необходимости могут быть предоставлены коды.

Редактировать: Если я могу выполнить это любым другим способом, не стесняйтесь делиться. (Нарисуйте круги на сетке и удалить те, которые я использовал свой палец, чтобы нарисовать свою линию над)

+0

Что такое 'objectA' и' objectB'? Что именно делает метод 'delete'? –

+0

@BartekLipinski - Приносим извинения. каждый круг представляет собой представление класса DotView. Я уточнил вопрос с более подробной информацией ... пожалуйста, дайте мне знать, если это еще не ясно. – andre3wap

ответ

0

Прежде всего попробуйте изменить метод delete() к этому:

public void delete(){ 
    mPaint.setColor(Color.TRANSPARENT); 
    invalidate(); 
} 

Вам нужно, чтобы ваш View знать, что вы хотите, чтобы он перерисовывался (вот почему звонок invalidate()).

+1

mhmmm, имеет смысл. Теперь мне хочется оставить работу и отправиться домой, чтобы проверить это. Я дам вам обновление через несколько часов. – andre3wap