Project

General

Profile

« Previous | Next » 

Revision 9814e53c

Added by Leszek Koltunski over 5 years ago

Progress with the 'Earth' app.

View differences:

src/main/java/org/distorted/examples/earth/EarthActivity.java
20 20
package org.distorted.examples.earth;
21 21

  
22 22
import android.app.Activity;
23
import android.content.Intent;
23
import android.opengl.GLSurfaceView;
24 24
import android.os.Bundle;
25
import android.view.Gravity;
26
import android.view.View;
27
import android.widget.AdapterView;
28
import android.widget.ArrayAdapter;
29
import android.widget.Button;
30
import android.widget.LinearLayout;
31
import android.widget.NumberPicker;
32
import android.widget.Spinner;
33
import android.widget.TableRow;
25
import android.widget.SeekBar;
34 26

  
35 27
import org.distorted.examples.R;
28
import org.distorted.library.main.Distorted;
29
import org.distorted.library.main.DistortedTexture;
30
import org.distorted.library.mesh.MeshBase;
31
import org.distorted.library.mesh.MeshSphere;
36 32

  
37 33
///////////////////////////////////////////////////////////////////////////////////////////////////
38 34

  
39
public class EarthActivity extends Activity
40
                               implements View.OnClickListener, AdapterView.OnItemSelectedListener
41
  {
42
  private static final int COLOR_OFF = 0xffffe81f;
43
  private static final int COLOR_ON  = 0xff0000ff;
44
  private static final int COLOR_INAC= 0xff999999;
35
public class EarthActivity extends Activity implements SeekBar.OnSeekBarChangeListener
36
{
37
    private static final int SIZE = 100;
38
    private static final int LEVEL=  32;
45 39

  
46
  private int mNumCols = 1;
47
  private int mNumRows = 1;
48
  private int mNumSlic = 1;
49
  private boolean mGridInitialized;
50
  private NumberPicker mColsPicker, mRowsPicker, mSlicPicker;
51
  private boolean[] mShape;
52
  private int mObjectType;
53
  private int mBitmapID;
54
  private LinearLayout mLay;
40
    private DistortedTexture mTexture;
41
    private MeshBase mMesh;
55 42

  
56 43
///////////////////////////////////////////////////////////////////////////////////////////////////
57

  
58
  @Override
59
  protected void onCreate(Bundle savedState)
60
    {
61
    super.onCreate(savedState);
62

  
63
    setContentView(R.layout.objectpickerlayout);
64

  
65
    mLay = findViewById(R.id.objectpicker_buttongrid);
66

  
67
    mColsPicker = findViewById(R.id.objectpicker_cols);
68
    mRowsPicker = findViewById(R.id.objectpicker_rows);
69
    mSlicPicker = findViewById(R.id.objectpicker_slices);
70

  
71
    mColsPicker.setMaxValue(40);
72
    mColsPicker.setMinValue( 1);
73
    mRowsPicker.setMaxValue(40);
74
    mRowsPicker.setMinValue( 1);
75
    mSlicPicker.setMaxValue(40);
76
    mSlicPicker.setMinValue( 0);
77

  
78
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
79
         {
80
         @Override
81
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
82
           {
83
           setGrid();
84
           }
85
         });
86

  
87
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
88
         {
89
         @Override
90
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
91
           {
92
           setGrid();
93
           }
94
         });
95

  
96
    mSlicPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
97
         {
98
         @Override
99
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
100
           {
101
           mNumSlic = mSlicPicker.getValue();
102
           }
103
         });
104

  
105
    mObjectType = 0;
106
    mGridInitialized = false;
107

  
108
    Spinner typeSpinner  = findViewById(R.id.objectpicker_spinnerType);
109
    typeSpinner.setOnItemSelectedListener(this);
110

  
111
    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat", "Mesh: Sphere", "Mesh: Quad"};
112

  
113
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
114
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
115
    typeSpinner.setAdapter(adapterType);
116

  
117
    Spinner bitmapSpinner  = findViewById(R.id.objectpicker_spinnerBitmap);
118
    bitmapSpinner.setOnItemSelectedListener(this);
119

  
120
    String[] objectBitmap = new String[] { "Texture: Grid", "Texture: Girl", "Texture: Dog", "Texture: Cat",
121
                                           "Texture: Squares", "Texture: Bean", "Texture: Lisa", "Texture: World" };
122

  
123
    ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
124
    adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
125
    bitmapSpinner.setAdapter(adapterBitmap);
126
    }
127

  
128
///////////////////////////////////////////////////////////////////////////////////////////////////
129

  
130
  private void setGrid()
131
    {
132
    mGridInitialized = true;
133

  
134
    mNumCols = mColsPicker.getValue();
135
    mNumRows = mRowsPicker.getValue();
136

  
137
    int width = mLay.getWidth();
138
    int height= mLay.getHeight();
139
    int w = mNumCols>0 ? (int)( 0.9f*width / mNumCols) : 0;
140
    int h = mNumRows>0 ? (int)( 0.9f*height/ mNumRows) : 0;
141
    int size= w<h ? w:h;
142
    int pad = size<20 ? 1 : size/20;
143

  
144
    mLay.removeAllViews();
145

  
146
    mShape = new boolean[mNumRows*mNumCols];
147

  
148
    TableRow.LayoutParams p = new TableRow.LayoutParams();
149

  
150
    p.rightMargin  = pad;
151
    p.leftMargin   = pad;
152
    p.topMargin    = pad;
153
    p.bottomMargin = pad;
154
    p.height       = size;
155
    p.width        = size;
156

  
157
    for (int rows=0; rows<mNumRows; rows++)
44
    
45
    @Override
46
    protected void onPause() 
158 47
      {
159
      TableRow tr = new TableRow(this);
160
      tr.setGravity(Gravity.CENTER);
161

  
162
      for(int cols=0; cols<mNumCols; cols++)
163
        {
164
        Button b = new Button(this);
165
        b.setOnClickListener(this);
166
        b.setId(rows*mNumCols+cols);
167
        b.setLayoutParams(p);
168
        b.setBackgroundColor(mObjectType==0 ? COLOR_ON:COLOR_INAC);
169
        tr.addView(b, p);
170
        mShape[rows*mNumCols+cols] = true;
171
        }
48
      GLSurfaceView mView = this.findViewById(R.id.earthSurfaceView);
49
      if( mView!=null ) mView.onPause();
172 50

  
173
      mLay.addView(tr);
51
      Distorted.onPause();
52
      super.onPause();
174 53
      }
175
    }
176 54

  
177 55
///////////////////////////////////////////////////////////////////////////////////////////////////
178

  
179
  public void onClick(View view)
180
    {
181
    if( mObjectType==0 )  // cubes
56
    
57
    @Override
58
    protected void onResume() 
182 59
      {
183
      Button tmp = (Button)view;
184
      int id = tmp.getId();
185
      mShape[id] = !mShape[id];
186
      tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
60
      super.onResume();
61
      
62
      GLSurfaceView mView = this.findViewById(R.id.earthSurfaceView);
63
      if( mView!=null ) mView.onResume();  
187 64
      }
188
    }
189

  
65
    
190 66
///////////////////////////////////////////////////////////////////////////////////////////////////
191

  
192
  private void uncheckAll()
193
    {
194
    TableRow tr;
195
    Button butt;
196

  
197
    for (int row=0; row<mNumRows; row++)
67
    
68
    @Override
69
    protected void onDestroy() 
198 70
      {
199
      tr = (TableRow)mLay.getChildAt(row);
200

  
201
      for(int col=0; col<mNumCols; col++)
202
        {
203
        butt = (Button)tr.getVirtualChildAt(col);
204
        butt.setBackgroundColor(mObjectType==0 ? COLOR_ON : COLOR_INAC);
205
        mShape[row*mNumCols+col] = true;
206
        }
71
      Distorted.onDestroy();  
72
      super.onDestroy();
207 73
      }
208
    }
209

  
74
 
210 75
///////////////////////////////////////////////////////////////////////////////////////////////////
211 76

  
212
  public void Create(View v)
213
    {
214
    Intent mainInt = new Intent( getApplicationContext(), EarthActivity2.class);
215
    Bundle b = new Bundle();
216

  
217
    int rows=0, cols=0;
218

  
219
    switch(mObjectType)
77
    @Override
78
    protected void onCreate(Bundle savedState)
220 79
      {
221
      case 0:
222
      case 1: rows = mNumRows;
223
              cols = mNumCols;
224
              break;
225
      case 2: rows = mNumRows;   // always make the sphere equal in X and Y
226
              cols = mNumRows;   //
227
              break;
228
      case 3: rows = 1;          // a quad is always 1x1
229
              cols = 1;
230
              break;
231
      }
232

  
233
    b.putInt("type", mObjectType);
234
    b.putInt("cols", cols);
235
    b.putInt("rows", rows);
236
    b.putInt("slices", mNumSlic);
237
    b.putInt("bitmap", mBitmapID);
80
      super.onCreate(savedState);
238 81

  
239
    if( mObjectType==0 )   // cubes
240
      {
241
      String str = "";
82
      mMesh = new MeshSphere(LEVEL);
83
      mTexture= new DistortedTexture(SIZE,SIZE);
242 84

  
243
      for(int i=0; i<mNumRows*mNumCols; i++)
244
        str += mShape[i] ? "1" : "0";
85
      setContentView(R.layout.earthlayout);
245 86

  
246
      b.putString("string", str);
247
      }
248
    else
249
      {
250
      b.putString("string", "");
87
      SeekBar levelBar = findViewById(R.id.earthInflateLevel);
88
      levelBar.setOnSeekBarChangeListener(this);
89
      levelBar.setProgress(50);
251 90
      }
252 91

  
253
    mainInt.putExtras(b);
254
    startActivity(mainInt);
255
    }
256

  
257 92
///////////////////////////////////////////////////////////////////////////////////////////////////
258 93

  
259
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
260
    {
261
    switch(parent.getId())
94
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
262 95
      {
263
      case R.id.objectpicker_spinnerType  : if( mObjectType!=pos )
264
                                              {
265
                                              mObjectType = pos;
266
                                              uncheckAll();
267

  
268
                                              switch(mObjectType)
269
                                                {
270
                                                case 0: mColsPicker.setEnabled(true);
271
                                                        mRowsPicker.setEnabled(true);
272
                                                        mSlicPicker.setEnabled(true);
273
                                                        break;
274
                                                case 1: mColsPicker.setEnabled(true);
275
                                                        mRowsPicker.setEnabled(true);
276
                                                        mSlicPicker.setEnabled(false);
277
                                                        break;
278
                                                case 2: mColsPicker.setEnabled(false);
279
                                                        mRowsPicker.setEnabled(true);
280
                                                        mSlicPicker.setEnabled(false);
281
                                                        break;
282
                                                case 3: mColsPicker.setEnabled(false);
283
                                                        mRowsPicker.setEnabled(false);
284
                                                        mSlicPicker.setEnabled(false);
285
                                                        break;
286
                                                }
287
                                              }
288
                                            break;
289
      case R.id.objectpicker_spinnerBitmap: switch(pos)
290
                                              {
291
                                              case 0: mBitmapID = -1            ; break;
292
                                              case 1: mBitmapID = R.raw.face    ; break;
293
                                              case 2: mBitmapID = R.raw.dog     ; break;
294
                                              case 3: mBitmapID = R.raw.cat     ; break;
295
                                              case 4: mBitmapID = R.raw.grid    ; break;
296
                                              case 5: mBitmapID = R.raw.bean    ; break;
297
                                              case 6: mBitmapID = R.raw.monalisa; break;
298
                                              case 7: mBitmapID = R.raw.world   ; break;
299
                                              }
300
                                            break;
96
      switch (bar.getId())
97
        {
98
        case R.id.earthInflateLevel: EarthSurfaceView view = this.findViewById(R.id.earthSurfaceView);
99
                                     view.getRenderer().setLevel(progress);
100
                                     break;
101
        }
301 102
      }
302
    }
303 103

  
304 104
///////////////////////////////////////////////////////////////////////////////////////////////////
305 105

  
306
  public void onNothingSelected(AdapterView<?> parent)
307
    {
308
    }
106
    public void onStartTrackingTouch(SeekBar bar) { }
309 107

  
310 108
///////////////////////////////////////////////////////////////////////////////////////////////////
311
// Overrides
109

  
110
    public void onStopTrackingTouch(SeekBar bar)  { }
111

  
312 112
///////////////////////////////////////////////////////////////////////////////////////////////////
313 113

  
314
  @Override
315
  public void onWindowFocusChanged(boolean hasFocus)
316
    {
317
    super.onWindowFocusChanged(hasFocus);
114
    public DistortedTexture getTexture()
115
      {
116
      return mTexture;
117
      }
318 118

  
319
    mColsPicker.setValue(mNumCols);
320
    mRowsPicker.setValue(mNumRows);
321
    mSlicPicker.setValue(mNumSlic);
119
///////////////////////////////////////////////////////////////////////////////////////////////////
322 120

  
323
    if( !mGridInitialized ) setGrid();
324
    }
325
  }
121
    public MeshBase getMesh()
122
      {
123
      return mMesh;
124
      }
125
}

Also available in: Unified diff