在android中绘制动画圈
我试图创建一个圆形动画,但屏幕不会自动刷新,它会在不同的位置绘制许多圆形,而不是绘制运动。我希望以这种方式使用它,而不是使用在android中绘制动画圈,android,Android,我试图创建一个圆形动画,但屏幕不会自动刷新,它会在不同的位置绘制许多圆形,而不是绘制运动。我希望以这种方式使用它,而不是使用invalidate()方法,因为我希望将它用于实时应用程序 代码如下: public class activity_layout_animation extends SurfaceView implements Runnable { Thread thread; boolean CanDraw = false; Paint red_fill;
invalidate()
方法,因为我希望将它用于实时应用程序
代码如下:
public class activity_layout_animation extends SurfaceView implements Runnable {
Thread thread;
boolean CanDraw = false;
Paint red_fill;
int circle_x, circle_y;
Canvas canvas;
SurfaceHolder surfaceHolder;
public activity_layout_animation(Context context){
super(context);
surfaceHolder = getHolder();
circle_x= 130;
circle_y=130;
}
@Override
public void run(){
preparePaint();
while(CanDraw){
if ( !surfaceHolder.getSurface().isValid()){
continue;
}
canvas = surfaceHolder.lockCanvas();
motionCircle(10);
canvas.drawCircle(circle_x,circle_y,50, red_fill);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
public void pause(){
CanDraw = false;
while(true) {
try {
thread.join();
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
thread = null;
}
public void resume(){
CanDraw = true;
thread = new Thread(this);
thread.start();
}
private void preparePaint(){
red_fill = new Paint();
red_fill.setColor(Color.RED);
red_fill.setStyle(Paint.Style.FILL);
}
private void motionCircle (int speed){
if ( (circle_y == 130) && ( circle_x < 650) ){
circle_x = circle_x + speed;
}
if ( (circle_y < 650) && ( circle_x ==650) ){
circle_y = circle_y + speed;
}
if ( (circle_y == 650) && ( circle_x > 130) ){
circle_x = circle_x - speed;
}
if ( (circle_y > 130) && ( circle_x== 130) ){
circle_y = circle_y - speed;
}
}
}
公共类活动\u布局\u动画扩展SurfaceView实现可运行{
螺纹;
布尔CanDraw=false;
涂上红漆;
整数圆x,圆y;
帆布;
浮雕浮雕;
公共活动\布局\动画(上下文){
超级(上下文);
surfaceHolder=getHolder();
圆_x=130;
圆圈y=130;
}
@凌驾
公开募捐{
preparePaint();
while(CanDraw){
如果(!surfaceHolder.getSurface().isValid()){
继续;
}
canvas=surfaceHolder.lockCanvas();
运动圆(10);
画布。画圈(画圈x,画圈y,50,红色填充);
surfaceHolder.unlockCanvasAndPost(画布);
}
}
公共空间暂停(){
坎德劳=假;
while(true){
试一试{
thread.join();
打破
}捕捉(中断异常e){
e、 printStackTrace();
}
}
线程=null;
}
公众简历(){
坎德劳=真;
线程=新线程(此);
thread.start();
}
私有无效预绘制(){
红色填充=新油漆();
红色填充。设置颜色(颜色。红色);
红色填充。设置样式(油漆。样式。填充);
}
专用无效运动圆(整数速度){
如果((圆y==130)和&(圆x<650)){
圆圈x=圆圈x+速度;
}
如果((圆y<650)和&(圆x==650)){
圆周y=圆周y+速度;
}
如果((圆y==650)和&(圆x>130)){
circle_x=circle_x-速度;
}
如果((圆y>130)和&(圆x==130)){
圆周y=圆周y-速度;
}
}
}
谢谢大家! 如何
postInvalidate()
-您可以从后台线程调用它。您还可以调用canvas.drawColor(backgroundColor)
从以前的图形中删除整个画布