2016-07-03 6 views
1

Я создал на базовом представлении, который имеет красный цвет в background.I использую этот вид в своей деятельности. У меня есть listOnTouch listner для того же вида. на событиях касания я перемещаю этот вид.Перерисовать вид на MotionEvent.ACTION_MOVE

Before touch event it looks like this

After MotionEvent.ACTION_MOVE it look like this

После события движения я хочу просмотреть, чтобы быть redrawn.I не хотят белая часть, чтобы показать.

он должен перерисовать его, как карта Google делает на карте в любом направлении.

следующий код моего основного пользовательского вида

public class CustomVIew extends View { 
    public CustomVIew(Context context) { 
     super(context); 
    } 

    public CustomVIew(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomVIew(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawColor(Color.RED); 
    } 
} 

Это мой OnTouch реализация метода

@Override 
    public boolean onTouch(View v, MotionEvent event) { 

switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 

       _xDelta = v.getX() - event.getRawX(); 
       _yDelta = v.getY() - event.getRawY(); 
       Log.d(TAG, "onTouch: X:" + _xDelta + " Y:" + _yDelta); 
       break; 

      case MotionEvent.ACTION_MOVE: 
       v.animate() 
         .x(event.getRawX() + _xDelta) 
         .y(event.getRawY() + _yDelta) 
         .setDuration(10) 
         .start(); 
       break; 
      default: 
       return false; 
     } 

     return true; 
} 

Thanx заранее

+0

почему вы не используете '' v.invalidate) метод (перерисовать? –

+0

@mehd azizi i tryed ivalidate on view, который я получаю в методе ontouch после анимации, но его не работает. Он просто рисует весь вид на новую позицию, он не перерисовывается, как карта – Amit

ответ

1

может потребоваться аннулировать вид.

это помогает: When it's necessary to execute invalidate() on a View?

@Override 
public boolean onTouch(View v, MotionEvent event) { 

switch (event.getAction()) { 

     case MotionEvent.ACTION_DOWN: 

      _xDelta = v.getX() - event.getRawX(); 
      _yDelta = v.getY() - event.getRawY(); 
      Log.d(TAG, "onTouch: X:" + _xDelta + " Y:" + _yDelta); 
      break; 

     case MotionEvent.ACTION_MOVE: 
      //do something like change the picture 
      v.invalidate(); 
      break; 
     default: 
      return false; 
    } 

    return true; 
} 
+0

не работает. То же самое происходит – Amit

+0

изменить фоновое изображение или что-то подобное в ACTION_MOVE? –

+0

no nothing Я меняю свое положение только на анимацию – Amit

Смежные вопросы