2016-07-03 3 views
1

Ich habe auf Basisansicht erstellt, die rote Farbe im Hintergrund hat. Ich verwende diese Ansicht in meiner Aktivität. Ich habe SetOnTouch Listner auf die gleiche Ansicht festgelegt. bei Berührungsereignissen verschiebe ich diese Ansicht.Redraw-Ansicht auf MotionEvent.ACTION_MOVE

Before touch event it looks like this

After MotionEvent.ACTION_MOVE it look like this

Nach Bewegung Ereignis möchte ich im Hinblick auf sein redrawn.I wollen nicht weiß Teil gezeigt werden.

sollte es neu zu zeichnen wie google map macht auf der moving map in eine beliebige richtung.

folgender Code ist mein Grund benutzerdefinierten Ansicht

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); 
    } 
} 

Das ist meiner OnTouch Methode Implementierung

@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 im Voraus

+0

warum Sie nicht verwenden 'v.invalidate()' Methode neu zu zeichnen? –

+0

@Mehd Azizi Ich versuchte Ivalidate auf Sicht, die ich in OnTouch-Methode nach der Animation, aber es funktioniert nicht .Es nur Dragging ganze Ansicht auf neue Position, es ist nicht neu zeichnen wie Karte – Amit

Antwort

1

Sie müssen möglicherweise die Ansicht entkräften.

das hilft: 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

es funktioniert nicht.Same ist passiert – Amit

+0

tun Sie ändere das Hintergrundbild oder etwas in ACTION_MOVE? –

+0

nein nichts Ich ändere seine Position nur durch animieren – Amit