Animar ImageView dentro de WindowManager en un servicio de Android

Estoy tratando de animar un ImageView creado dinámicamente en un servicio, pero no hay forma de conseguir que funcione … Creo que el problema es porque estoy usando un administrador de Windows y debería tener que usar un FrameLayout o algo similar y lugar El ImageView dentro, pero no tengo idea de cómo hacerlo programáticamente … De todos modos, alguien sabe cómo conseguir este trabajo? ¡Ayuda pleaseee!

@Override public void onCreate() { super.onCreate(); final GestureDetector mGestureDetector = new GestureDetector(getApplicationContext(), new MyGestureDetector()); windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); chatHead = new ImageView(this); chatHead.setImageResource(R.drawable.btn_enable_floating); final WindowManager.LayoutParams params = new WindowManager.LayoutParams( 100, 107, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.RIGHT; params.x = 0; params.y = 100; chatHead.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(); chatHead.setImageResource(R.drawable.btn_enable_floating_hover); return mGestureDetector.onTouchEvent(event); case MotionEvent.ACTION_UP: chatHead.setImageResource(R.drawable.btn_enable_floating); return mGestureDetector.onTouchEvent(event); case MotionEvent.ACTION_MOVE: //params.x = initialX + (int) (event.getRawX() - initialTouchX); params.y = initialY + (int) (event.getRawY() - initialTouchY); windowManager.updateViewLayout(chatHead, params); return mGestureDetector.onTouchEvent(event); } return mGestureDetector.onTouchEvent(event); } }); windowManager.addView(chatHead, params); RotateAnimation ra = new RotateAnimation( 0, -80, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // how long the animation will take place ra.setDuration(210); // set the animation after the end of the reservation status ra.setFillAfter(true); // Start the animation chatHead.startAnimation(ra); } 

Acabo de tener el mismo problema, aquí es una solución: En lugar de un ImageView, usted necesita agregar un FrameLayout, que tiene su ImageView.

 LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); floatingLayout = (FrameLayout) inflater.inflate(R.layout.floating_layout, null); 

Guarde su botón para tratar las animaciones más tarde:

 mButton = (ImageView) floatingLayout.findViewById(R.id.mButton); 

Instaed de agregar un botón, agregue un diseño:

 windowManager.addView(floatingLayout, floatingLayoutParams); 

¡Animar!

 Animation rotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotation); rotate.setDuration(1000); mButton.startAnimation(rotate); 
  • Google Cloud Messaging - GCM - SERVICE_NOT_AVAILABLE
  • Servicio con cola de prioridad en Android
  • Iniciar el servicio en el arranque, pero no toda la aplicación de Android
  • El servicio no se reinicia después de que "Clear Memory" + appWidget se bloquea
  • Iniciar servicio desde la notificación
  • Inicio del servicio de fondo cuando se enciende Android
  • Enviar correo electrónico en servicio (sin preguntar al usuario)
  • ¿Hay una alternativa onBackPressed () para un servicio?
  • Servicio de Android y tareas repetitivas que se ejecutan en subprocesos
  • ¿Cómo eliminar todas las notificaciones cuando se cancela una aplicación de Android (actividad o servicio)?
  • Grabar sonido Y reproducir sonido modulado En Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.