Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android使来自其他类的视图无效_Java_Android - Fatal编程技术网

Java Android使来自其他类的视图无效

Java Android使来自其他类的视图无效,java,android,Java,Android,我有两个类MyView和MyThread,希望每隔几毫秒从MyThread类中的计时器重新绘制视图。 计时器开始运行,但我的视图不会被重新绘制,我不明白为什么。这是我的密码: MyView: public class MyView extends SurfaceView{ private MainActivity mainActivity; private Random random = new Random(); public MyView(Context context) { supe

我有两个类MyView和MyThread,希望每隔几毫秒从MyThread类中的计时器重新绘制视图。 计时器开始运行,但我的视图不会被重新绘制,我不明白为什么。这是我的密码:

MyView:

public class MyView extends SurfaceView{


private MainActivity mainActivity;
private Random random = new Random();

public MyView(Context context) {
super(context);
mainActivity = (MainActivity)context;
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    setBackgroundColor(Color.argb(random.nextInt(255),random.nextInt(255),
            random.nextInt(255),random.nextInt(255)));
  }
} 
内容如下:

 public class MyThread implements SurfaceHolder.Callback {

private Timer timer = new Timer();
private MainActivity mainActivity;
private MyView myView;

public MyThread(Context context) {
   mainActivity = (MainActivity) context;
   myView = new MyView(context);
   timer.schedule(new TimerThread(),50,50);
}

class TimerThread extends TimerTask {

    @Override
    public void run() {
        mainActivity.runOnUiThread(new TimerTask() {
            @Override
            public void run() {
                Log.v("Log","Timer run");
                myView.setBackgroundColor(Color.RED);
                myView.invalidate();
            }
        });
    }
}

如果有任何帮助,我们将不胜感激。

不要使用new MyView在MyThread创建新的引用,您必须将已有的引用作为参数传递。另外,我不确定,但您可以从其他线程调用invalidate。请您再解释一下,现在如果我删除这个新的MyView(),会引发一个Nullpointerexception。请将您的构造函数更新为public MyThread(Context Context,View reference),这样您就可以使用该引用调用方法了。我不是从表面视图扩展,而是从视图扩展