Project

General

Profile

« Previous | Next » 

Revision 248a2782

Added by Leszek Koltunski over 7 years ago

Progress with "Around The World"

View differences:

src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldSurfaceViewPicker.java
20 20
package org.distorted.examples.aroundtheworld;
21 21

  
22 22
import android.content.Context;
23
import android.graphics.Canvas;
23
import android.opengl.GLSurfaceView;
24
import android.os.Build;
24 25
import android.util.AttributeSet;
25 26
import android.view.MotionEvent;
26
import android.view.SurfaceHolder;
27
import android.view.SurfaceView;
28 27

  
29 28
///////////////////////////////////////////////////////////////////////////////////////////////////
30 29

  
31
class AroundTheWorldSurfaceViewPicker extends SurfaceView implements SurfaceHolder.Callback
30
class AroundTheWorldSurfaceViewPicker extends GLSurfaceView
32 31
{
33
    private static final int FRAME_INTERVAL = 70;
34

  
35
    private boolean refreshScreen = true;
36
    private boolean mFinishedBooting=false;
37
    private int scrWidth, scrHeight;
38
    private GraphicsThread mThread;
39
    private int mX, mY;
40

  
41
///////////////////////////////////////////////////////////////////////////////////////////////////
42

  
43
    private class GraphicsThread extends Thread
44
      {
45
      private SurfaceHolder mSurfaceHolder;
46
      private AroundTheWorldSurfaceViewPicker mPicker;
47
      private boolean mRun = false;
48

  
49
      /////////////////////////////////////////////////////////////////////////////////////
50

  
51
      GraphicsThread(SurfaceHolder surfaceHolder, AroundTheWorldSurfaceViewPicker p)
52
        {
53
        mSurfaceHolder = surfaceHolder;
54
        mPicker = p;
55
        }
56

  
57
      /////////////////////////////////////////////////////////////////////////////////////
58

  
59
      void setRunning(boolean run)
60
        {
61
        mRun = run;
62
        }
63

  
64
      /////////////////////////////////////////////////////////////////////////////////////
65

  
66
      public void run()
67
        {
68
        Canvas c;
69
        long time;
70

  
71
        while (mRun)
72
          {
73
          c = null;
74
          time = 0;
75

  
76
          if( refreshScreen && mFinishedBooting )
77
            {
78
            refreshScreen=false;
79
            time = System.currentTimeMillis();
80

  
81
            try
82
              {
83
              c = mSurfaceHolder.lockCanvas(null);
84
              synchronized (mSurfaceHolder) { mPicker.draw(c); }
85
              }
86
            finally
87
              {
88
              if (c != null)  mSurfaceHolder.unlockCanvasAndPost(c);
89
              }
90

  
91
            time = System.currentTimeMillis() -time;
92
            }
93

  
94
          if( time<FRAME_INTERVAL )
95
            {
96
            try { Thread.sleep(FRAME_INTERVAL-time); }
97
            catch(InterruptedException ex) {}
98
            }
99
          }
100
        }
101
    }
32
    private AroundTheWorldRendererPicker mRenderer;
102 33

  
103 34
///////////////////////////////////////////////////////////////////////////////////////////////////
104 35

  
......
106 37
      {
107 38
      super(c, attrs);
108 39

  
109
      mX = -100;
110
      mY = -100;
111

  
112
      getHolder().addCallback(this);
113
      setFocusable(true);
114
      setFocusableInTouchMode(true);
115

  
116
      mFinishedBooting=true;
117
      }
118

  
119
///////////////////////////////////////////////////////////////////////////////////////////////////
120

  
121
    public void surfaceCreated(SurfaceHolder holder)
122
      {
123
      android.util.Log.e( "Picker", "surfaceCreated");
124

  
125
      mThread = new GraphicsThread(getHolder(), this);
126
      mThread.setRunning(true);
127
      mThread.start();
128
      }
129

  
130
///////////////////////////////////////////////////////////////////////////////////////////////////
131

  
132
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
133
      {
134
      android.util.Log.e( "Picker", "surfaceChanged: width="+w+" height="+h);
135

  
136
      scrWidth = w;
137
      scrHeight= h;
138
      refreshScreen = true;
139
      }
140

  
141
///////////////////////////////////////////////////////////////////////////////////////////////////
142

  
143
    public void surfaceDestroyed(SurfaceHolder holder)
144
      {
145
      android.util.Log.e( "Picker", "surfaceDestroyed");
146

  
147
      stopThread();
148
      }
149

  
150
///////////////////////////////////////////////////////////////////////////////////////////////////
151

  
152
    private void stopThread()
153
      {
154
      if( mThread!=null )
40
      if(!isInEditMode())
155 41
        {
156
        boolean retry = true;
157
        mThread.setRunning(false);
42
        setEGLContextClientVersion(2);
158 43

  
159
        while (retry)
44
        if( Build.FINGERPRINT.startsWith("generic") )
160 45
          {
161
          try
162
            {
163
            mThread.join();
164
            retry = false;
165
            }
166
          catch (InterruptedException e) { android.util.Log.e( "Picker", "Joining thread interrupted!"); }
46
          setEGLConfigChooser(8, 8, 8, 8, 16, 0);
167 47
          }
168 48

  
169
        mThread=null;
49
        mRenderer = new AroundTheWorldRendererPicker();
50
        setRenderer(mRenderer);
170 51
        }
171 52
      }
172

  
173 53
///////////////////////////////////////////////////////////////////////////////////////////////////
174 54

  
175
    public void draw(Canvas c)
55
    public AroundTheWorldRendererPicker getRenderer()
176 56
      {
177
      if( c!=null )
178
        {
179

  
180
        }
57
      return mRenderer;
181 58
      }
182 59

  
183 60
///////////////////////////////////////////////////////////////////////////////////////////////////
184 61

  
185
    public void setRepaint()
62
    @Override public boolean onTouchEvent(MotionEvent event)
186 63
      {
187
      refreshScreen=true;
188
      }
189

  
190
///////////////////////////////////////////////////////////////////////////////////////////////////
64
      int x = (int)event.getX();
65
      int y = (int)event.getY();
191 66

  
192
    public boolean onTouchEvent(MotionEvent event)
193
      {
194
      mX = (int)event.getX();
195
      mY = (int)event.getY();
196

  
197
      android.util.Log.e( "Picker", "onTouchEvent: x="+mX+" y="+mY);
198

  
199
      setRepaint();
67
      android.util.Log.e("Picker", "touched at x="+x+" y="+y);
200 68

  
201 69
      return true;
202 70
      }
203 71
}
72

  

Also available in: Unified diff