我正在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中使之失效。从逻辑上讲,在onDraw中使无效无效会导致较差的结果-要么被忽略,要么会导致立即重绘。都不需要。
而且,您不能在线程上使之无效,您需要使用postInvalidate。而且您的线程是错误的-或者不使用线程,使用Runnable并将其发布到Handler,或者线程应该无限循环,而不返回。最好是第一个,根本没有理由在这里建立线程。