gpt4 book ai didi

java - Android 中 onDraw 上的 Invalidate() 方法

转载 作者:行者123 更新时间:2023-12-01 19:31:13 28 4
gpt4 key购买 nike

我正在 android studio 中做一个项目。我只想使用 onDraw()invalidate() 做一个闪烁的光点,但出了点问题。

这是第一个类

public class flashingPoint extends View {

private ShapeDrawable mParteDibujable;

public flashingPoint(Context context){

super(context);

final Handler bridge = new Handler();

Thread time = new Thread() {

public void run() {

bridge.postDelayed(this, 1000);
invalidate();

}

};
time.start();

}
@Override
protected void onDraw(Canvas canvas) {
mParteDibujable = new ShapeDrawable(new OvalShape());
mParteDibujable.getPaint().setColor(0xff74AC23);
mParteDibujable.setBounds(10, 20, 80, 80);

mParteDibujable.draw(canvas);
//invalidate();

}

然后是主类:

public class MainActivity extends AppCompatActivity {

private ShapeDrawable mParteDibujable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LinearLayout mLinearLayout = new LinearLayout(this);

flashingPoint myView = new flashingpoint(this);
mLinearLayout.addView(myView);

setContentView(mLinearLayout);

}
}

最佳答案

如果你有定时器,你既不需要也不希望onDraw中的invalidate。 onDraw 中的无效在逻辑上很奇怪,并且会导致糟糕的结果 - 它要么被忽略,要么会导致立即重绘。两者都不是所希望的。

此外,您不能在线程上使无效,您需要使用 postInvalidate。并且您的线程是错误的 - 要么不使用线程,使用 Runnable 并将其发布到处理程序,要么线程应该无限循环,而不是返回。最好是第一个,根本没有理由在这里有一个线程。

关于java - Android 中 onDraw 上的 Invalidate() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59725087/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com