#android #animation #service
#Android #Анимация #Обслуживание
Вопрос:
Я пытаюсь анимировать просмотр изображений, созданный динамически в службе, но не могу заставить его работать… Я думаю, проблема в том, что я использую диспетчер Windows, и мне нужно использовать FrameLayout или что-то подобное и поместить ImageView внутрь, но понятия не имею, как это сделать программно… В любом случае, кто-нибудь знает, как заставить это работать? Помогите, пожалуйста!
@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);
}
Ответ №1:
У меня только что была такая же проблема, вот решение: вместо ImageView вам нужно добавить FrameLayout, в котором есть ваш ImageView.
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
floatingLayout = (FrameLayout) inflater.inflate(R.layout.floating_layout, null);
Сохраните свою кнопку, чтобы работать с анимацией позже:
mButton = (ImageView) floatingLayout.findViewById(R.id.mButton);
Вместо добавления кнопки добавьте макет:
windowManager.addView(floatingLayout, floatingLayoutParams);
Анимируйте!
Animation rotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotation);
rotate.setDuration(1000);
mButton.startAnimation(rotate);