2016-07-03 12 views
1

背景に赤色の基本ビューを作成しました。アクティビティでそのビューを使用しています。setOnTouch 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; 
} 

ありがとう事前

+0

なぜあなたは再描画するために 'v.invalidate()'メソッドを使用していませんか? –

+0

@mehd azizi私はアニメーションの後でontouchメソッドを取得するビューでivalidateをtryedが、その動作していません。それは新しい位置に全体のビューをdra draging、それはマップのように再描画されていません – 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

そのthing.Soft事が起こっている – Amit

+0

ACTION_MOVEで背景画像やそのようなものを変更しますか? –

+0

何もありません大きな画像を表示して移動する場合は、スクロールビューで画像ビューを追加する必要がある場合は、アニメーションで位置を変更しています – Amit

関連する問題