androidモバイルview


元の場所:http://www.tuicool.com/articles/IFZb2mR
私達はよくいくつか効果をします.例えば、クリックした後の動画は指の動きに従って移動します.彼らはどうやって実現しますか?私たちは自動的にviewを移動するまで、アニメーションを設定できます.例えば、以前書いたFragmentのエントリとポップアップ動画などです.https://github.com/nuptboyzhb/FragmentAnimationDemo では、私たちはどうやって指の動きに合わせてViewで移動しますか?
1.ontouch事件
私たちはViewにontouchイベントを追加して、移動中の指のスクリーンに対する位置情報を取得します.
@Override
  public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      break;
    case MotionEvent.ACTION_MOVE:
      moveViewWithFinger(view, event.getRawX(), event.getRawY());
      break;
    case MotionEvent.ACTION_UP:
      break;
    }
    return true;
  }
2.方法1:set LayoutParaams
指の位置を取得すると、ビューのレイアウトを動的に設定することで、「移動」ビューの目的を達成することができます.[コード]
/**
  *   View     ,  view         :view         RelativeLayout            
  * 
  * @param view
  * @param rawX
  * @param rawY
  */
  private void moveViewWithFinger(View view, float rawX, float rawY) {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view
        .getLayoutParams();
    params.leftMargin = (int) rawX - ivMove.getWidth() / 2;
    params.topMargin = (int) rawY - topTitleHeight - ivMove.getHeight() / 2;
    view.setLayoutParams(params);
  }
3.方法2:view.layout(l,t,r,b)
方法二の制限は主にviewのある配置に対して高い要求がありますが、layoutは多くの要求がありません.RelativeLayoutでもいいし、Lineear Layoutでもいいです.
/**
  *   layout  ,  view 
  *   : view     ,     ,   RelativeLayout,      view   
  * 
  * @param view
  * @param rawX
  * @param rawY
  */
  private void moveViewByLayout(View view, int rawX, int rawY) {
    int left = rawX - ivMove.getWidth() / 2;
    int top = rawY - topTitleHeight - ivMove.getHeight() / 2;
    int width = left + view.getWidth();
    int height = top + view.getHeight();
    view.layout(left, top, width, height);
  }
また、移動中にviewのサイズを動的に変えることもできます.
4.Surfaceviewの対象
SurfaceViewでは、Viewを移動しやすく、「新版飛行機大戦」のソースコードを参照することができます.https://github.com/nuptboyzhb/newplanegame ]で、主機の移動は指の移動とともに移動します.
5.方法1と2のソースコード: https://github.com/nuptboyzhb/MoveViewWithFinger