Reputation: 9
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
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