我有Service
可以使用包含自定义Canvas
的{{1}}在所有应用程序之上绘制SYSTEM_ALERT_WINDOW
。
我正在尝试使用调用View
和Canvas
的{{1}}来设置Thread
对象的动画。我希望这会“移动”#34;整个屏幕的形状。它不起作用。
我尝试将自定义Canvas.draw(...)
放入postInvalidate()
容器中,并根据以下帖子将其添加到View
对象中:
Animate system alert type view
WindowManager with Animation (is it possible?)
Canvas对象位置没有改变 - 我做错了什么?
这是我的代码......
CursorService.java
ViewGroup
Cursor.java
WindowManager
答案 0 :(得分:2)
首先,您需要在runnable中使用while(true){}
周期的smth,因为在您的代码中postInvalidate()
方法只会被调用一次。
但最好在invalidate()
中调用onDraw
方法,并使用当前时间计算您的圈位。
public class Cursor extends View {
public Cursor(Context context) {
super(context);
startTime = System.currentTimeMills();
}
@Override
protected void onDraw(Canvas canvas){
long delta = System.currentTimeMills() - startTime;
// ... calculate x and y using delta
canvas.drawCircle(x, y, radius, paint);
invalidate();
}
}
答案 1 :(得分:-1)
由于您要从单独的线程更改x
,y
和radius
,因此您应该使它们变得不稳定。否则,您的视图(在UI线程上)将不会看到您对这些变量(来自后台线程)所做的更改。
public volatile float x;
public volatile float y;
public volatile float radius;