[onvalidate()方法在Android上的onDraw

问题描述 投票:0回答:1

我正在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);

    }
}
java android ondraw
1个回答
3
投票

如果有计时器,则既不需要也不想在o​​nDraw中使之失效。从逻辑上讲,在onDraw中使无效无效会导致较差的结果-要么被忽略,要么会导致立即重绘。都不需要。

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

© www.soinside.com 2019 - 2024. All rights reserved.