Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Android 通过向此类传递一些变量来更新SurfaceView_Android_Variables_Draw_Surfaceview - Fatal编程技术网

Android 通过向此类传递一些变量来更新SurfaceView

Android 通过向此类传递一些变量来更新SurfaceView,android,variables,draw,surfaceview,Android,Variables,Draw,Surfaceview,我对Android和Java编程还是相当陌生的,甚至对动态绘制图像也比较陌生 我想做的是从我的活动Main中更新一行。我希望将图形与Main分开,因此我添加了一个名为Panel的新文件和类 当我运行代码时,我得到一个带有java.lang.NullPointerException的FC。当我移除Draw()时;从onCreate()中,我没有得到FC 所以基本上,在Main.java中,我想计算一些值,我想传递给面板,用来绘制图形 这是我代码的简化版本,但我认为我犯了一些根本错误,因为这是我第一

我对Android和Java编程还是相当陌生的,甚至对动态绘制图像也比较陌生

我想做的是从我的活动
Main
中更新一行。我希望将图形与
Main
分开,因此我添加了一个名为
Panel
的新文件和类

当我运行代码时,我得到一个带有
java.lang.NullPointerException
的FC。当我移除Draw()时;从onCreate()中,我没有得到FC

所以基本上,在Main.java中,我想计算一些值,我想传递给面板,用来绘制图形

这是我代码的简化版本,但我认为我犯了一些根本错误,因为这是我第一次使用超过1个java文件

非常感谢你的帮助

Main.java(简化) Panel.java layout.xml(简化)
上面发布的代码不起作用有几个原因。要获得surfaceview如何工作的示例,请查看googleAPIs中的月球着陆器代码,该代码应随Android SDK下载而来

package com.tricky_design.app;

import com.tricky_design.app.*;

public class Main extends Activity {

    private Panel Drawing;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        Drawing = (Panel) findViewById (R.id.Drawing);
        Draw();

    }

    private void Draw() {
        Drawing.redraw( 10, 20, 30, 40);
    }
}
package com.tricky_design.app;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

class Panel extends SurfaceView implements SurfaceHolder.Callback{

    private int LineLeft    = 0;
    private int LineRight   = 0;
    private int LineTop     = 0;
    private int LineBottom  = 0;

    Paint paint = new Paint();

    public Panel(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        getHolder().addCallback(this);
    }

    @Override
    public void onDraw(Canvas canvas) {
        DrawLines(canvas);
    }

    public void DrawLines(Canvas canvas) {
        canvas.drawLine(Left, Right, Bottom, Top, paint);
    }

    public void redraw(int Left, int Right, int Top, int Bottom) {
        LineLeft   = Left;
        LineRight  = Right;
        LineTop    = Top;
        LineBottom = Bottom;
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        Canvas c = getHolder().lockCanvas();
        draw(c);
        getHolder().unlockCanvasAndPost(c);
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
}
 <com.tricky_design.app.Panel
     android:id="@+id/Drawing"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:background="#FC123456">
 </com.tricky_design.app.Panel>
07-21 18:48:34.501: ERROR/AndroidRuntime(12385): FATAL EXCEPTION: main
07-21 18:48:34.501: ERROR/AndroidRuntime(12385): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tricky_design.app/com.tricky_design.app.main}: java.lang.NullPointerException
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.ActivityThread.access$1500(ActivityThread.java:132)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.os.Looper.loop(Looper.java:143)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.ActivityThread.main(ActivityThread.java:4196)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at java.lang.reflect.Method.invokeNative(Native Method)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at java.lang.reflect.Method.invoke(Method.java:507)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at dalvik.system.NativeStart.main(Native Method)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385): Caused by: java.lang.NullPointerException
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at com.tricky_design.app.main.Draw(main.java:376)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at com.tricky_design.app.main.init(main.java:311)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at com.tricky_design.app.main.onCreate(main.java:245)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
07-21 18:48:34.501: ERROR/AndroidRuntime(12385):     ... 11 more