Akita
Akita

Reputation: 9

Java Android Not an enclosing class error

I'm new in Java and Android, i have to use a method inside another but it doesn't work. when i setContentView to new SurfaceViewStart.OurView(this) in the DrawingCanvass Java class it throw an error message "SurfaceViewStart is not an enclosing class". Thanks in anticipation

This is the SurfaceViewStart Java class

public class SurfaceViewStart extends Activity implements View.OnTouchListener {

OurView v;
Bitmap ball;
float x, y;
@Override
protected void onCreate (Bundle saveInstanceState){
    super.onCreate(saveInstanceState);
    v = new OurView(this);
    //the v variable is calling the context of the constructor under public class OurView
    v.setOnTouchListener(this);
    ball = BitmapFactory.decodeResource(getResources(), R.drawable.wall7);
    x = 0;
    y = 0;
    setContentView(v);
}

@Override
protected void onPause(){
    super.onPause();
}

@Override
protected void onResume(){
    super.onResume();
}


public class OurView extends SurfaceView implements Runnable {
    //implementing Runnable makes the object of the class to act as a thread
    //this class will handle the drawing in the canvass
    //public class Ourview is a constructor

    Thread tie = null;
    SurfaceHolder holder;
    //this allow us to change the dimension of our view
    Boolean value = false;

    public OurView (Context context){
        super(context);

        holder = getHolder();

    }

    public void run(){
    //the public void run() is introduce after implementing Runnable
    //the surfaceview becomes a thread
    //this run the thread

        while (value == true){
            //this performs the drawing on the canvass
            //it is called invalidate, which causes the thread to loop through
            if (!holder.getSurface().isValid()){
                //if holder.getSurface is not valid, i.e our surface is not available

                continue;
                //it will go back and loop again checking if value == true and also if the surface is available, continue to
                //loop if it's not available
            }
            //our canvass will then be created here

            Canvas can = holder.lockCanvas();
            //the canvass is normally lock before drawing and  unlock it on display

            can.drawARGB(255, 150, 120, 100);
            //the A stands for Alpha and this will paint our canvass

            can.drawBitmap(ball, x - (can.getWidth()/2), y - (can.getHeight()/2), null);

            holder.unlockCanvasAndPost(can);
            //this will unlock the canvass and display the drawing
            //no Bitmap is drawn now untill we add an onCreate method to the Mainclass SurfaceViewStart

        }

    }

    public void pause(){
        //this pause the thread

        value = false;

        while (true){
            try {
                tie.join();
                //these blocks the current thread until  the receiver finishes the execution and die
            }catch (InterruptedException d){
                d.printStackTrace();
            }
            break;
        }

        tie = null;
    }

    public void resume(){
        //this resume the thread

        value = true;
        tie = new Thread(this);
        // 'this' used in the new thread refer to the run class which has been implemented
        tie.start();

    }
}
public boolean onTouch(View v, MotionEvent we){
    //this handles
    return false;
}

}

This is the DrawingCanvas Java Class

public class DrawingCanvass extends Activity {

SurfaceViewStart.OurView v;
//SurfaceViewStart v;

@Override
protected void onCreate (Bundle saveInstanceState){
    super.onCreate(saveInstanceState);

    v = new SurfaceViewStart.OurView(this);
    setContentView(v);
}
}

Upvotes: 0

Views: 3654

Answers (1)

Blackbelt
Blackbelt

Reputation: 157447

to fully qualify your inner class, using the outer class name, your inner class has to be static.

public static class OurView extends SurfaceView implements Runnable {

otherwise you need an instance of the outer class to access it. Like

 outerClassInstace.new OurView(this);

which is not the case for DrawingCanvass, since you don't an instance of the other Activity

Upvotes: 3

Related Questions