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