MainActivity.java revision e45b1fd03b524d2b57cc6c222d89076a31a08bea
1cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 2cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckpackage com.example.renderthread; 3cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 4cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.app.Activity; 5cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.content.Intent; 6cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.os.Bundle; 7cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.os.Handler; 8cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.view.HardwareRenderer; 9e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckimport android.view.RenderNodeAnimator; 10cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.view.View; 11cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.widget.AdapterView; 12cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.widget.AdapterView.OnItemClickListener; 13cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.widget.ListView; 14cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport android.widget.SimpleAdapter; 15cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 16cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport java.util.ArrayList; 17cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport java.util.HashMap; 18cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckimport java.util.Map; 19cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 20cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckpublic class MainActivity extends Activity implements OnItemClickListener { 21cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 22e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck static final int TRANSLATION_Y = 1; 23e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck static final int DELTA_TYPE_DELTA = 1; 24cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck static final int DURATION = 400; 25cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 26cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck static final String KEY_NAME = "name"; 27cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck static final String KEY_CLASS = "clazz"; 28cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 29cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck static Map<String,?> make(String name) { 30cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck Map<String,Object> ret = new HashMap<String,Object>(); 31cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck ret.put(KEY_NAME, name); 32cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck return ret; 33cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 34cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 35cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck @SuppressWarnings("serial") 36cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck static final ArrayList<Map<String,?>> SAMPLES = new ArrayList<Map<String,?>>() {{ 37cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck for (int i = 1; i < 25; i++) { 38cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck add(make("List Item: " + i)); 39cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 40cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck }}; 41cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 42cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck Handler mHandler = new Handler(); 43cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 44cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck @Override 45cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck protected void onCreate(Bundle savedInstanceState) { 46cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck super.onCreate(savedInstanceState); 47cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck HardwareRenderer.sUseRenderThread = true; 48cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck setContentView(R.layout.activity_main); 49cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck ListView lv = (ListView) findViewById(android.R.id.list); 50cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck lv.setDrawSelectorOnTop(true); 51cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck lv.setAdapter(new SimpleAdapter(this, SAMPLES, 52cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck R.layout.item_layout, new String[] { KEY_NAME }, 53cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck new int[] { android.R.id.text1 })); 54cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck lv.setOnItemClickListener(this); 55cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck getActionBar().setTitle("MainActivity"); 56cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 57cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 58cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck @Override 59cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck protected void onResume() { 60cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck super.onResume(); 61cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck ListView lv = (ListView) findViewById(android.R.id.list); 62cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck for (int i = 0; i < lv.getChildCount(); i++) { 63cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck lv.getChildAt(i).animate().translationY(0).setDuration(DURATION); 64cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 65cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 66cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 67cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck @Override 68cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck public void onItemClick(final AdapterView<?> adapterView, View clickedView, 69cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck int clickedPosition, long clickedId) { 70cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck int topPosition = adapterView.getFirstVisiblePosition(); 71cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck int dy = adapterView.getHeight(); 72cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck for (int i = 0; i < adapterView.getChildCount(); i++) { 73cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck int pos = topPosition + i; 74cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck View child = adapterView.getChildAt(i); 75cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck float delta = (pos - clickedPosition) * 1.1f; 76cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck if (delta == 0) delta = -1; 77e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck RenderNodeAnimator animator = new RenderNodeAnimator( 78e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck TRANSLATION_Y, DELTA_TYPE_DELTA, dy * delta); 79e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck animator.setDuration(DURATION); 80e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck animator.start(child); 81cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 82cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck //mHandler.postDelayed(mLaunchActivity, (long) (DURATION * .4)); 83cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck mLaunchActivity.run(); 84cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 85cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 86cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck private Runnable mLaunchActivity = new Runnable() { 87cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 88cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck @Override 89cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck public void run() { 90cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck startActivity(new Intent(MainActivity.this, SubActivity.class)); 91cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck overridePendingTransition(0, 0); 92cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 93cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck }; 94cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 95cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck} 96