Android весенняя анимация не работает, когда я использую сервис для раздувания макета - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь добиться того, чтобы когда я перестал перетаскивать объект, он должен был прилипнуть к стене экрана.

Я много читал, но не получил желаемого.Я новичок в разработке Android.

Я создаю пакет-бридж для реактивной системы.Мое намерение - создать плавающую шапку чата, например Messenger Facebook .Я создал его успешно, теперь я просто хочу анимировать его, когда я прекращаю перетаскивать элемент.

https://developer.android.com/images/guide/topics/graphics/spring-release.gif

    package com.example.recylerview.springanimation;

     import android.app.Service;
     import android.content.Intent;
     import android.graphics.PixelFormat;
     import android.os.IBinder;
     import android.support.animation.DynamicAnimation;
     import android.support.animation.SpringAnimation;
     import android.support.animation.SpringForce;
     import android.view.Gravity;
     import android.view.LayoutInflater;
     import android.view.MotionEvent;
     import android.view.View;
     import android.view.WindowManager;
     import android.widget.ImageView;
     import android.widget.RelativeLayout;

   public class FloatingViewService extends Service {
   private static final int Value_Of_Drag = 1799;
   private WindowManager mWindowManager;
    private RelativeLayout mImage;
    private SpringAnimation xAnimation;
    public View mFloatingView;
    private float xDiffInTouchPointAndViewTopLeftCorner = 0f;
    private float yDiffInTouchPointAndViewTopLeftCorner = 0f;
    public FloatingViewService() {
   }

      @Override
     public IBinder onBind(Intent intent) {
    return null;
    }

    @Override
     public void onCreate() {
    super.onCreate();

         mFloatingView = 
        LayoutInflater.from(this).inflate(R.layout.activity_main, null);

            final WindowManager.LayoutParams params = new 
            WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.START;        
    params.x = 0;
    params.y = 0;
    mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    mWindowManager.addView(mFloatingView, params);


    xAnimation = new 
    SpringAnimation(mFloatingView.findViewById(R.id.id), 
    DynamicAnimation.TRANSLATION_X, 0f);
    xAnimation.getSpring().setStiffness(SpringForce.STIFFNESS_LOW);
    xAnimation.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY);


    mFloatingView.findViewById(R.id.id).setOnTouchListener(new 
     View.OnTouchListener() {
        private int initialX;
        private int initialY;
        private float initialTouchX;
        private float initialTouchY;
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    initialX = params.x;
                    initialY = params.y;
                    initialTouchX = event.getRawX();
                    initialTouchY = event.getRawY();
                     xAnimation.cancel();
                    return true;
                case MotionEvent.ACTION_UP:

                    xAnimation.start();

                    return true;
                case MotionEvent.ACTION_MOVE:

                    params.x = initialX + (int) (event.getRawX() - initialTouchX);
                    params.y = initialY + (int) (event.getRawY() - initialTouchY);

                    mWindowManager.updateViewLayout(mFloatingView, params);

                    return true;
            }

            return false;
        }

    });

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...