天天看點

從底部升起的Menu_動畫效果

目标:利用 <translate />動畫,自定義Dialog,寫出從底部升起的Menu菜單。

貼代碼一: 調用自定義Dialog

public class MainActivity extends Activity {
    private Button button;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button=(Button)findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				Dialog dialog=new MyDialog(MainActivity.this,R.style.MyDialogStyle);
				Window window = dialog.getWindow();
				//設定顯示動畫
				window.setWindowAnimations(R.style.main_menu_animstyle);
				//設定顯示位置
				WindowManager.LayoutParams wl = window.getAttributes();
				wl.x = 0;
				wl.y = getWindowManager().getDefaultDisplay().getHeight();
			    //設定寬度 
				//這裡未能解決高分辨率下"充滿螢幕的問題",但仍可用來設定寬度=螢幕×0.幾
//				WindowManager m=getWindowManager();
//				Display d=m.getDefaultDisplay();
//				wl.width=(int)(d.getWidth());
				
				window.setAttributes(wl);
				dialog.setCanceledOnTouchOutside(true);//設定點選外圍解散
				dialog.show();
				
			}
		});
	}
}
           

貼代碼二: MyDialog extends Dialog

public class MyDialog  extends Dialog {
    Context context;
    private TextView tv_cancel;
	public MyDialog(Context context, int theme) {
		super(context, theme);
		this.context=context;
		
	}
	public MyDialog(Context context) {
		super(context);
		this.context=context;
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.share_dialog_layout);
		//解決在高分辨率下寬度不能充滿螢幕的問題
		getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		
		tv_cancel=(TextView)findViewById(R.id.tv_cancel);
		//這裡也可以用回調函數實作
		//如果要在這裡實作,則必須寫字首android.view.View.OnClickListener
		//我試過直接implements android.view.View.OnClickListener,在onClick()中,也不行
		tv_cancel.setOnClickListener(new android.view.View.OnClickListener() {
			@Override
			public void onClick(View v) {
				dismiss();
			}
		});
	}
}
           

貼代碼三: share_dialog_layout.xml   Dialog的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical" >

    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/red" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:text="share this news" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25dp"
        android:layout_marginRight="25dp"
        android:layout_marginTop="20dp"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:src="@drawable/share_weixin" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:src="@drawable/share_friendzone" />
 
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:src="@drawable/share_weibo" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center" 
            android:orientation="vertical">

            <ImageView
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:src="@drawable/share_qzone" />

        </LinearLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/tv_cancel"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_margin="20dp"
        android:background="#ffffff"
        android:textColor="@drawable/tv_white_red_selector"
        android:gravity="center"
        android:text="cancel"
        android:textSize="16sp" />

</LinearLayout>
           

貼代碼四:

① style.xml 中定義 動畫和NoTitle, Background為Transparent。

<style name="main_menu_animstyle" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/window_in</item>
        <item name="android:windowExitAnimation">@anim/window_out</item>
    </style>

    <style name="MyDialogStyle" parent="@android:Theme.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 記得windowBackground必須設定為Transparent -->
    </style>
           

② activity_main.xml 主布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="從底部升起的Menu菜單" />
</RelativeLayout>
           

③ 動畫anim/window_in , anim/window_out

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate  
        android:duration="500"  
        android:fromYDelta="100%"  
        android:toYDelta="0" /> 
</set>
           
<set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate  
        android:duration="500"  
        android:fromYDelta="0"  
        android:toYDelta="100%" /> 
</set>
           

④ textView的textColor_selector,    tv_white_red_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/red"></item>
    <item android:state_pressed="false" android:color="@color/white"></item>
</selector>
           

⑤colors.xml

<resources>
    <color name="white">#E6E6E6</color>
    <color name="red">#C22221</color>
    <color name="textView_white">#555555</color>    
</resources>
           

貼截圖:

從底部升起的Menu_動畫效果
從底部升起的Menu_動畫效果
從底部升起的Menu_動畫效果

項目代碼: http://download.csdn.net/detail/a86261566/8273331