Android,View 드래그 실현

3965 단어 AndroidView끌다
본 논문 의 사례 는 안 드 로 이 드 가 View 드래그 를 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
머리말
View 의 드래그 를 실현 하 는 것 은 사실 원리 가 매우 간단 하 다.손가락 의 변위 정 보 를 얻 은 다음 view 는 손가락 의 변위 정보 에 따라 해당 하 는 위 치 를 이동 합 니 다.
우선 휴대 전화의 위치 이동 정 보 를 얻 으 면 수요 에 따라 두 가지 로 나 눌 수 있다
4.567917.view 자 체 를 끌 어 당 겨 view 가 이동 합 니 다.view 의 setOnTouchListener 를 설정 합 니 다.
  • activity 에서 마음대로 미 끄 러 지면 view 는 동작 을 반영 합 니 다.activity onTouchEvent 방법 을 다시 씁 니 다.
  • 이동 하 는 방법 도 몇 가지 가 있 습 니 다.
  • view 에 추가 애니메이션 을 설정 합 니 다.애니메이션 시간 은 0 입 니 다.(추천 하지 않 습 니 다.view 의 그림자 만 이동 하기 때문에 로 컬 은 제자리 에 있 습 니 다)
  • view 의 margin 을 변경 합 니 다.(추천 하지 않 습 니 다.viewgroup 의 레이아웃 배열 에 영향 을 줄 수 있 습 니 다)
  • 속성 애니메이션 원리 에 따라 setTranslationX 와 setTranslationY 를 변경 합 니 다.(이 방법 을 추천 합 니 다.원리 에 영향 을 주지 않 는 레이아웃 배열)
  • 코드
    
    public class ViewTestActivity extends AppCompatActivity {
      private static final String TAG = "ViewTestActivity";
      private TextView mTv1,mTv2;
      private double lastx,lastY;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_test);
        mTv1= (TextView) findViewById(R.id.tv01);
        mTv1.setOnTouchListener(new View.OnTouchListener() {
          @Override
          public boolean onTouch(View v, MotionEvent event) {
            double x=event.getRawX();
            double y=event.getRawY();
            Log.d(TAG, "onTouch: "+event.getAction());
            if (event.getAction()==MotionEvent.ACTION_DOWN){
              lastx=x;
              lastY=y;
            }else if (event.getAction()==MotionEvent.ACTION_MOVE){
              double dx=x-lastx;
              double dy=y-lastY;
              Log.d(TAG, "onTouch: dx=="+dx+",dy=="+dy);
    //      startAnimation(dx,dy);
    
              // moveMethod1(dx, dy);
              moveMethod2(dx, dy);
    
              lastx=x;
              lastY=y;
            }
            return true;
          }
        });
      }
    
    //  @Override
    //  public boolean onTouchEvent(MotionEvent event) {
    //    double x=event.getRawX();
    //    double y=event.getRawY();
    //    Log.d(TAG, "onTouch: "+event.getAction());
    //    if (event.getAction()==MotionEvent.ACTION_DOWN){
    //      lastx=x;
    //      lastY=y;
    //    }else if (event.getAction()==MotionEvent.ACTION_MOVE){
    //      double dx=x-lastx;
    //      double dy=y-lastY;
    //      Log.d(TAG, "onTouch: dx=="+dx+",dy=="+dy);
    ////      startAnimation(dx,dy);
    //
    //     // moveMethod1(dx, dy);
    //      moveMethod2(dx, dy);
    //
    //      lastx=x;
    //      lastY=y;
    //    }
    //    return true;
    //  }
    
      //         
      private void moveMethod2(double dx, double dy) {
        
        mTv1.setTranslationX((float) (mTv1.getTranslationX()+dx));
        mTv1.setTranslationY((float) (mTv1.getTranslationY()+dy));
      }
      
      //  margin   
      private void moveMethod1(double dx, double dy) {
        ViewGroup.MarginLayoutParams marginLayoutParams= (ViewGroup.MarginLayoutParams) mTv1.getLayoutParams();
        marginLayoutParams.leftMargin+=dx;
        marginLayoutParams.topMargin+=dy;
        mTv1.setLayoutParams(marginLayoutParams);
      }
    
      private void startAnimation(double dx, double dy) {
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(mTv1,"translationX", (float) (mTv1.getTranslationX()+dx)).setDuration(3000);
        objectAnimator.start();
    
        ObjectAnimator objectAnimator2=ObjectAnimator.ofFloat(mTv1,"translationY", (float) (mTv1.getTranslationY()+dy)).setDuration(3000);
        objectAnimator2.start();
      }
    }
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기