Click here to Skip to main content
11,711,750 members (79,537 online)
Rate this: bad
Please Sign up or sign in to vote.
See more: Java Android
public class MyActivity extends Activity {
     * Called when the activity is first created.
    Button btn;
    SurfaceView sv;
    public void onCreate(Bundle savedInstanceState) {
        btn = (Button)findViewById(;
        sv =  (SurfaceView)findViewById(;
        sv.setOnTouchListener( new SurfaceView.OnTouchListener(){
            private boolean moving = false;//stupid state
            public boolean onTouch(View v, MotionEvent event) {
                switch( event.getAction() ){
                    case MotionEvent.ACTION_DOWN:
                        final int x = (int)event.getX();
                        final int y = (int)event.getY();
                        final SurfaceHolder mHolder;
                        mHolder = sv.getHolder();
                        Canvas canvas = null;
                        canvas = mHolder.lockCanvas();
                        Paint mPaint = new Paint();
                        canvas.drawText("some text", 50, 50, mPaint);
                        }catch (Exception xx)
                            xx.toString();//canvas = null
                        return true;
                    case MotionEvent.ACTION_MOVE:
                        if( moving ){
                            final int x_new = (int)event.getX();
                            final int y_new = (int)event.getY();
                        return true;
                    case MotionEvent.ACTION_UP:
                        moving = false;
                        return true;
                return false;
I just want to draw some info when I touched or moved. I don't want to use OnDraw method because it eat CPU.
Edited as was suggested:
protected void onPause()
    mHolder = sv.getHolder();
    canvas = null;
    canvas = mHolder.lockCanvas();
But it not helped, this func doesn't executes, canvas still = null.
I also tried this, in button OnClick:
mPaint = new Paint();
mHolder = sv.getHolder();
canvas = null;
canvas = mHolder.lockCanvas();
   canvas.drawText("some text", 100, 100, mPaint);
}catch (Exception xx)
- When I first click on button canvas != null, but after canvas.drawText execution go in nowhere, when I make second click - canvas = null. My brain corrode.
Posted 22-Dec-12 10:42am
Edited 22-Dec-12 22:47pm

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1


can not hold a valid value while you are still in the onCreate() method. It's not yet initialized at that runtime.

Activity has other methods

protected void onResume(); // before Activity run
protected void onPause(); // after Activity run

That's a better place to interact with the SurfaceView.

Please also read in the documentation about these lifecycle controling methods:

Activity[^] @ Android Documentation
halabella at 23-Dec-12 4:49am
Thanks. Please read my question once again, I have edited my code as you suggested, but without result.
TorstenH. at 23-Dec-12 5:04am
Please read the documentation about Activity. It is well explained when which function is called.
halabella at 23-Dec-12 5:58am
Have read, tried, it's helpless. I don't want to do like this first because it eat CPU, second I will unable to add some Buttons or other lements, and unable to switch to another layout because then TouchEvents will not working.
TorstenH. at 23-Dec-12 6:53am
so you also tried to use the onStart() method?

Really. I also have books like that on the shelf - but some things need to be read.
halabella at 23-Dec-12 9:30am
onStart() - doesn't matter, I tried to execute commands manually by pressing button, and it not work properly.
halabella at 24-Dec-12 8:20am
Nobody knows?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 CHill60 280
1 Sergey Alexandrovich Kryukov 264
2 OriginalGriff 170
3 Andy Lanng 160
4 Richard MacCutchan 130
0 CHill60 280
1 Sergey Alexandrovich Kryukov 125
2 Andy Lanng 120
3 Abhinav S 95
4 Maciej Los 95

Advertise | Privacy | Mobile
Web03 | 2.8.150819.1 | Last Updated 23 Dec 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100