1 public class Main4Activity extends Activity { 2 3 private TextView tv1; 4 private Button button1; 5 private RelativeLayout rlMain; 6 private int mHeight = 0; 7 int topHide; 8 int topShow; 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main4); 14 15 rlMain = (RelativeLayout) findViewById(R.id.rlMain); 16 tv1 = (TextView) findViewById(R.id.tv1); 17 tv1.setVisibility(View.GONE); 18 button1 = (Button) findViewById(R.id.button1); 19 20 final LayoutTransition transitioner = new LayoutTransition(); 21 transitioner.setDuration(150); 22 rlMain.setLayoutTransition(transitioner); 23 24 mHeight = getResources().getDisplayMetrics().heightPixels 25 - getStatusBarHeight(this); 26 27 getWindow().getDecorView().addOnLayoutChangeListener( 28 new View.OnLayoutChangeListener() { 29 30 @Override 31 public void onLayoutChange(View arg0, int arg1, int arg2, 32 int arg3, int arg4, int arg5, int arg6, int arg7, 33 int arg8) { 34 35 //计算显示时y坐标 36 topShow = mHeight - dip2px(Main4Activity.this, 70) 37 - getActionBar().getHeight(); 38 //计算隐藏时y坐标 39 topHide = mHeight - getActionBar().getHeight(); 40 41 // VISIBLE 42 ObjectAnimator customAppearingAnim = ObjectAnimator 43 .ofFloat(null, "y", topHide, topShow); 44 customAppearingAnim 45 .addListener(new AnimatorListenerAdapter() { 46 public void onAnimationEnd(Animator anim) { 47 View view = (View) ((ObjectAnimator) anim) 48 .getTarget(); 49 view.setY(topShow); 50 } 51 }); 52 53 // GONE 54 ObjectAnimator customDisappearingAnim = ObjectAnimator 55 .ofFloat(null, "y", topShow, topHide); 56 customDisappearingAnim 57 .addListener(new AnimatorListenerAdapter() { 58 public void onAnimationEnd(Animator anim) { 59 View view = (View) ((ObjectAnimator) anim) 60 .getTarget(); 61 view.setY(topHide); 62 } 63 }); 64 65 transitioner.setAnimator(LayoutTransition.APPEARING, 66 customAppearingAnim); 67 68 transitioner.setAnimator(LayoutTransition.DISAPPEARING, 69 customDisappearingAnim); 70 71 } 72 }); 73 74 button1.setOnClickListener(new OnClickListener() { 75 76 @Override 77 public void onClick(View arg0) { 78 79 if (tv1.getVisibility() == View.GONE) { 80 81 tv1.setVisibility(View.VISIBLE); 82 83 } else { 84 tv1.setVisibility(View.GONE); 85 } 86 87 } 88 }); 89 90 } 91 92 /** 93 * dip转px 94 * @param context 95 * @param dipValue 96 * @return 97 */ 98 public static int dip2px(Context context, float dipValue) { 99 final float scale = context.getResources().getDisplayMetrics().density; 100 return (int) (dipValue * scale + 0.5f); 101 } 102 103 /** 104 * 获取系统状态栏高度 105 * @param context 106 * @return 107 */ 108 public int getStatusBarHeight(Context context) { 109 Class<?> c = null; 110 Object obj = null; 111 Field field = null; 112 int x = 0, statusBarHeight = 0; 113 try { 114 c = Class.forName("com.android.internal.R$dimen"); 115 obj = c.newInstance(); 116 field = c.getField("status_bar_height"); 117 x = Integer.parseInt(field.get(obj).toString()); 118 statusBarHeight = context.getResources().getDimensionPixelSize(x); 119 Log.v("@@@@@@", "the status bar height is : " + statusBarHeight); 120 } catch (Exception e1) { 121 e1.printStackTrace(); 122 } 123 return statusBarHeight; 124 } 125 126 }
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/rlMain" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" > 6 7 <TextView 8 android:id="@+id/tv1" 9 android:layout_width="match_parent" 10 android:layout_height="70dp" 11 android:layout_alignParentBottom="true" 12 android:background="@android:color/holo_red_dark" 13 android:gravity="center" 14 android:text="@string/hello_world" 15 android:textColor="@android:color/white" /> 16 17 <Button 18 android:id="@+id/button1" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:layout_alignParentLeft="true" 22 android:layout_alignParentTop="true" 23 android:layout_marginLeft="44dp" 24 android:text="Button" /> 25 26 <TextView 27 android:id="@+id/textView1" 28 android:layout_width="match_parent" 29 android:layout_height="wrap_content" 30 android:layout_alignLeft="@+id/button1" 31 android:layout_below="@+id/button1" 32 android:maxLines="10" 33 android:scrollbars="vertical" 34 android:text="TextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextView" /> 35 36 </RelativeLayout>