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