动画Android窗口和视图

Ani*_*ala 5 animation android

我正在做一个自定义的android构建,我的服务在每个应用程序的顶部添加一个View.使用以下代码:

WindowManager mWM = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
mParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_PHONE, 
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
                PixelFormat.TRANSLUCENT);
mParams.height = 117;
mParams.width = 366;
View myView = inflater.inflate(R.layout.myView,null);
mWM.addView(myView, mParams);
Run Code Online (Sandbox Code Playgroud)

我能够成功添加视图.我正在使用动画制作视图

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 300);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX).start();
Run Code Online (Sandbox Code Playgroud)

我看到视图有生气,但不是窗口.以前视图所在的透明窗口不是动画.这与Android Property Animation中描述的行为相同

视图动画系统的另一个缺点是它只修改了绘制视图的位置,而不是实际的视图本身.例如,如果您设置了一个按钮以在屏幕上移动,则该按钮会正确绘制,但您可以单击该按钮的实际位置不会更改,因此您必须实现自己的逻辑来处理此问题.

如何使窗口与视图一起设置动画?

谢谢

tac*_*lux 1

您可以通过从窗口参数中删除高度和宽度来使窗口填充整个屏幕。如果您想控制视图大小,请在布局中进行设置。


否则,您可以使用 aValueAnimator并重复调用WindowManagers updateViewLayout

ValueAnimator va = ValueAnimator.ofInt(mParams.x, 300);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    public void onAnimationUpdate(ValueAnimator animation) {
        Integer value = (Integer) animation.getAnimatedValue();
        mParams.x = value.intValue();
        mWM.updateViewLayout(myView, mParams);
    }
});
Run Code Online (Sandbox Code Playgroud)