Project

General

Profile

Download (10.2 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity.java @ 107e4b72

1 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 76a81b6a Leszek Koltunski
package org.distorted.examples.effects3d;
21 08f92d82 Leszek Koltunski
22
import android.app.Activity;
23 348dbeea Leszek Koltunski
import android.content.Intent;
24 08f92d82 Leszek Koltunski
import android.os.Bundle;
25 d40cfeb2 Leszek Koltunski
import android.view.Gravity;
26 08f92d82 Leszek Koltunski
import android.view.View;
27 50ac40a6 Leszek Koltunski
import android.widget.AdapterView;
28
import android.widget.ArrayAdapter;
29 d40cfeb2 Leszek Koltunski
import android.widget.Button;
30 08f92d82 Leszek Koltunski
import android.widget.LinearLayout;
31 d40cfeb2 Leszek Koltunski
import android.widget.NumberPicker;
32 50ac40a6 Leszek Koltunski
import android.widget.Spinner;
33 d40cfeb2 Leszek Koltunski
import android.widget.TableRow;
34 08f92d82 Leszek Koltunski
35
import org.distorted.examples.R;
36
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38
39 76a81b6a Leszek Koltunski
public class Effects3DActivity extends Activity
40 fe7fe83e Leszek Koltunski
                               implements View.OnClickListener, AdapterView.OnItemSelectedListener
41 d40cfeb2 Leszek Koltunski
  {
42 50ac40a6 Leszek Koltunski
  private static final int COLOR_OFF = 0xffffe81f;
43
  private static final int COLOR_ON  = 0xff0000ff;
44 bfcf419a Leszek Koltunski
  private static final int COLOR_INAC= 0xff00ff00;
45 50ac40a6 Leszek Koltunski
46 65f622c1 Leszek Koltunski
  private int mNumCols = 1;
47
  private int mNumRows = 1;
48
  private int mNumSlic = 1;
49 2e755580 Leszek Koltunski
  private boolean mGridInitialized;
50 b3b2c6cf leszek
  private NumberPicker mColsPicker, mRowsPicker, mSlicPicker;
51 50ac40a6 Leszek Koltunski
  private boolean[] mShape;
52 bcc8e016 Leszek Koltunski
  private int mObjectType;
53 cdc515b9 Leszek Koltunski
  private int mBitmapID;
54 bfcf419a Leszek Koltunski
  private LinearLayout mLay;
55 d40cfeb2 Leszek Koltunski
56 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
57 56cbe1cf Leszek Koltunski
58 d40cfeb2 Leszek Koltunski
  @Override
59
  protected void onCreate(Bundle savedState)
60
    {
61
    super.onCreate(savedState);
62
63 50ac40a6 Leszek Koltunski
    setContentView(R.layout.objectpickerlayout);
64 d40cfeb2 Leszek Koltunski
65 bddd4b2d Leszek Koltunski
    mLay = findViewById(R.id.objectpicker_buttongrid);
66 bfcf419a Leszek Koltunski
67 bddd4b2d Leszek Koltunski
    mColsPicker = findViewById(R.id.objectpicker_cols);
68
    mRowsPicker = findViewById(R.id.objectpicker_rows);
69
    mSlicPicker = findViewById(R.id.objectpicker_slices);
70 d40cfeb2 Leszek Koltunski
71 9758b1ec Leszek Koltunski
    mColsPicker.setMaxValue(40);
72 d40cfeb2 Leszek Koltunski
    mColsPicker.setMinValue( 0);
73 9758b1ec Leszek Koltunski
    mRowsPicker.setMaxValue(40);
74 d40cfeb2 Leszek Koltunski
    mRowsPicker.setMinValue( 0);
75 b3b2c6cf leszek
    mSlicPicker.setMaxValue(40);
76
    mSlicPicker.setMinValue( 0);
77 d40cfeb2 Leszek Koltunski
78
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
79 bfcf419a Leszek Koltunski
         {
80
         @Override
81
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
82
           {
83
           setGrid();
84
           }
85
         });
86 d40cfeb2 Leszek Koltunski
87
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
88 bfcf419a Leszek Koltunski
         {
89
         @Override
90
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
91
           {
92
           setGrid();
93
           }
94
         });
95 d40cfeb2 Leszek Koltunski
96 b3b2c6cf leszek
    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 50ac40a6 Leszek Koltunski
    mObjectType = 0;
106 2e755580 Leszek Koltunski
    mGridInitialized = false;
107 d40cfeb2 Leszek Koltunski
108 bddd4b2d Leszek Koltunski
    Spinner typeSpinner  = findViewById(R.id.objectpicker_spinnerType);
109 50ac40a6 Leszek Koltunski
    typeSpinner.setOnItemSelectedListener(this);
110 d40cfeb2 Leszek Koltunski
111 bfcf419a Leszek Koltunski
    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat"};
112 d40cfeb2 Leszek Koltunski
113 bcc8e016 Leszek Koltunski
    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 bddd4b2d Leszek Koltunski
    Spinner bitmapSpinner  = findViewById(R.id.objectpicker_spinnerBitmap);
118 bcc8e016 Leszek Koltunski
    bitmapSpinner.setOnItemSelectedListener(this);
119
120 bfcf419a Leszek Koltunski
    String[] objectBitmap = new String[] { "Texture: Grid", "Texture: Girl", "Texture: Dog", "Texture: Cat",
121
                                           "Texture: Squares", "Texture: Bean", "Texture: Lisa" };
122 bcc8e016 Leszek Koltunski
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 d40cfeb2 Leszek Koltunski
    }
127
128
///////////////////////////////////////////////////////////////////////////////////////////////////
129
130 50ac40a6 Leszek Koltunski
  private void setGrid()
131 d40cfeb2 Leszek Koltunski
    {
132 2e755580 Leszek Koltunski
    mGridInitialized = true;
133
134 bfcf419a Leszek Koltunski
    mNumCols = mColsPicker.getValue();
135
    mNumRows = mRowsPicker.getValue();
136 d40cfeb2 Leszek Koltunski
137 bfcf419a Leszek Koltunski
    int width = mLay.getWidth();
138
    int height= mLay.getHeight();
139 57ba16f3 Leszek Koltunski
    int w = mNumCols>0 ? (int)( 0.9f*width / mNumCols) : 0;
140
    int h = mNumRows>0 ? (int)( 0.9f*height/ mNumRows) : 0;
141 d40cfeb2 Leszek Koltunski
    int size= w<h ? w:h;
142 57ba16f3 Leszek Koltunski
    int pad = size<20 ? 1 : size/20;
143 d40cfeb2 Leszek Koltunski
144 bfcf419a Leszek Koltunski
    mLay.removeAllViews();
145 d40cfeb2 Leszek Koltunski
146
    mShape = new boolean[mNumRows*mNumCols];
147
148 56cbe1cf Leszek Koltunski
    TableRow.LayoutParams p = new TableRow.LayoutParams();
149 d40cfeb2 Leszek Koltunski
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++)
158 08f92d82 Leszek Koltunski
      {
159 d40cfeb2 Leszek Koltunski
      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 bfcf419a Leszek Koltunski
        b.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
169 d40cfeb2 Leszek Koltunski
        tr.addView(b, p);
170 bcc8e016 Leszek Koltunski
        mShape[rows*mNumCols+cols] = true;
171 d40cfeb2 Leszek Koltunski
        }
172
173 bfcf419a Leszek Koltunski
      mLay.addView(tr);
174 d40cfeb2 Leszek Koltunski
      }
175
    }
176
177
///////////////////////////////////////////////////////////////////////////////////////////////////
178
179 56cbe1cf Leszek Koltunski
  public void onClick(View view)
180 d40cfeb2 Leszek Koltunski
    {
181 bfcf419a Leszek Koltunski
    if( mObjectType!=1 )
182
      {
183
      Button tmp = (Button)view;
184
      int id = tmp.getId();
185
      mShape[id] = !mShape[id];
186
      tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
187
      }
188
    }
189
190
///////////////////////////////////////////////////////////////////////////////////////////////////
191
192
  private void uncheckAll()
193
    {
194
    TableRow tr;
195
    Button butt;
196
197
    for (int row=0; row<mNumRows; row++)
198
      {
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==1 ? COLOR_INAC : COLOR_ON);
205
        mShape[row*mNumCols+col] = true;
206
        }
207
      }
208 bcc8e016 Leszek Koltunski
    }
209
210
///////////////////////////////////////////////////////////////////////////////////////////////////
211 50ac40a6 Leszek Koltunski
212 bfcf419a Leszek Koltunski
  public void Create(View v)
213 bcc8e016 Leszek Koltunski
    {
214 348dbeea Leszek Koltunski
    Intent mainInt = new Intent( getApplicationContext(), Effects3DActivity2.class);
215
    Bundle b = new Bundle();
216
217
    b.putInt("type", mObjectType);
218
    b.putInt("cols", mNumCols);
219
    b.putInt("rows", mNumRows);
220
    b.putInt("slices", mNumSlic);
221
    b.putInt("bitmap", mBitmapID);
222 a98db446 Leszek Koltunski
223 50ac40a6 Leszek Koltunski
    if( mObjectType==1 )
224
      {
225 348dbeea Leszek Koltunski
      b.putString("string", "");
226 50ac40a6 Leszek Koltunski
      }
227
    else
228
      {
229 bfcf419a Leszek Koltunski
      String str = "";
230 50ac40a6 Leszek Koltunski
231 bfcf419a Leszek Koltunski
      for(int i=0; i<mNumRows*mNumCols; i++)
232
        str += mShape[i] ? "1" : "0";
233 50ac40a6 Leszek Koltunski
234 348dbeea Leszek Koltunski
      b.putString("string", str);
235 50ac40a6 Leszek Koltunski
      }
236 bcc8e016 Leszek Koltunski
237 348dbeea Leszek Koltunski
    mainInt.putExtras(b);
238
    startActivity(mainInt);
239 d40cfeb2 Leszek Koltunski
    }
240
241 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
242
243
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
244
    {
245
    switch(parent.getId())
246
      {
247 bfcf419a Leszek Koltunski
      case R.id.objectpicker_spinnerType  : if( mObjectType!=pos )
248
                                              {
249
                                              mObjectType = pos;
250
                                              uncheckAll();
251
                                              }
252 56cbe1cf Leszek Koltunski
                                            break;
253 bcc8e016 Leszek Koltunski
      case R.id.objectpicker_spinnerBitmap: switch(pos)
254
                                              {
255 cdc515b9 Leszek Koltunski
                                              case 0: mBitmapID = -1        ; break;
256
                                              case 1: mBitmapID = R.raw.face; break;
257
                                              case 2: mBitmapID = R.raw.dog ; break;
258
                                              case 3: mBitmapID = R.raw.cat ; break;
259
                                              case 4: mBitmapID = R.raw.grid; break;
260
                                              case 5: mBitmapID = R.raw.bean; break;
261
                                              case 6: mBitmapID = R.raw.monalisa; break;
262 bcc8e016 Leszek Koltunski
                                              }
263
                                            break;
264 50ac40a6 Leszek Koltunski
      }
265
    }
266
267
///////////////////////////////////////////////////////////////////////////////////////////////////
268
269
  public void onNothingSelected(AdapterView<?> parent)
270
    {
271
    }
272
273 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
274 d40cfeb2 Leszek Koltunski
// Overrides
275 fe7fe83e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
276 d40cfeb2 Leszek Koltunski
277
  @Override
278
  public void onWindowFocusChanged(boolean hasFocus)
279
    {
280
    super.onWindowFocusChanged(hasFocus);
281
282 bfcf419a Leszek Koltunski
    mColsPicker.setValue(mNumCols);
283
    mRowsPicker.setValue(mNumRows);
284 b3b2c6cf leszek
    mSlicPicker.setValue(mNumSlic);
285 bfcf419a Leszek Koltunski
286 2e755580 Leszek Koltunski
    if( !mGridInitialized ) setGrid();
287 d40cfeb2 Leszek Koltunski
    }
288
  }