android(6) 扇形菜單實現,android扇形

來源:互聯網
上載者:User

android(6) 扇形菜單實現,android扇形

一.扇形菜單的實現:

    借鑒了大神們的源碼,那我們來看一下扇形菜單是怎麼實現的:

    

 



主介面布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"     android:background="@drawable/background">        <!--     android:clipChildren的意思:是否限制子View在其範圍內    android:clipToPadding就是說控制項的繪製地區是否在padding裡面的     -->    <RelativeLayout        android:id="@+id/buttons_wrapper_layout"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:clipChildren="false"        android:clipToPadding="false" >        <ImageButton            android:id="@+id/button_photo"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignParentRight="true"            android:layout_marginBottom="142dp"            android:layout_marginRight="10dp"            android:background="@drawable/path2_composer_camera"            android:visibility="gone" />        <ImageButton            android:id="@+id/button_people"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignParentRight="true"            android:layout_marginBottom="135dp"            android:layout_marginRight="52dp"            android:background="@drawable/path2_composer_with"            android:visibility="gone" />        <ImageButton            android:id="@+id/button_place"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignParentRight="true"            android:layout_marginBottom="116dp"            android:layout_marginRight="89dp"            android:background="@drawable/path2_composer_place"            android:visibility="gone" />        <ImageButton            android:id="@+id/button_music"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignParentRight="true"            android:layout_marginBottom="87dp"            android:layout_marginRight="118dp"            android:background="@drawable/path2_composer_music"            android:visibility="gone" />        <ImageButton            android:id="@+id/button_thought"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignParentRight="true"            android:layout_marginBottom="50dp"            android:layout_marginRight="137dp"            android:background="@drawable/path2_composer_thought"            android:visibility="gone" />        <ImageButton            android:id="@+id/button_sleep"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignParentRight="true"            android:layout_marginBottom="8dp"            android:layout_marginRight="144dp"            android:background="@drawable/path2_composer_sleep"            android:visibility="gone" />    </RelativeLayout>    <RelativeLayout        android:id="@+id/buttons_show_hide_button_layout"        android:layout_width="60dp"        android:layout_height="57dp"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:background="@drawable/path2_composer_button" >        <ImageView            android:id="@+id/buttons_show_hide_button"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:src="@drawable/path2_composer_icn_plus" />    </RelativeLayout></RelativeLayout>

Activity:

public class MainActivity extends Activity {private boolean isShowing;private RelativeLayout buttons_wrapper_layout;private ImageView buttons_show_hide_button;private RelativeLayout buttons_show_hide_button_layout;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.sector_menu);        MyAnimations.initOffset(MainActivity.this);buttons_wrapper_layout = (RelativeLayout) findViewById(R.id.buttons_wrapper_layout);buttons_show_hide_button_layout = (RelativeLayout) findViewById(R.id.buttons_show_hide_button_layout);buttons_show_hide_button = (ImageView) findViewById(R.id.buttons_show_hide_button);buttons_show_hide_button_layout.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (!isShowing) {MyAnimations.startAnimationsIn(buttons_wrapper_layout, 300);buttons_show_hide_button.startAnimation(MyAnimations.getRotateAnimation(0,-270, 300));} else {MyAnimations.startAnimationsOut(buttons_wrapper_layout, 300);buttons_show_hide_button.startAnimation(MyAnimations.getRotateAnimation(-270, 0, 300));}isShowing = !isShowing;}});for (int i = 0; i < buttons_wrapper_layout.getChildCount(); i++) {buttons_wrapper_layout.getChildAt(i).setOnClickListener(new OnClickImageButton());}    }             class OnClickImageButton implements View.OnClickListener{@Overridepublic void onClick(View arg0) {switch(arg0.getId()){case R.id.button_photo:Toast.makeText(MainActivity.this, "photo", Toast.LENGTH_SHORT).show();break;case R.id.button_people:Toast.makeText(MainActivity.this, "people", Toast.LENGTH_SHORT).show();break;case R.id.button_place:Toast.makeText(MainActivity.this, "place", Toast.LENGTH_SHORT).show();break;case R.id.button_music:Toast.makeText(MainActivity.this, "music", Toast.LENGTH_SHORT).show();break;case R.id.button_thought:Toast.makeText(MainActivity.this, "thought", Toast.LENGTH_SHORT).show();break;case R.id.button_sleep:Toast.makeText(MainActivity.this, "sleep", Toast.LENGTH_SHORT).show();break;}}        }}


動畫實現:

public class MyAnimations {private static int xOffset = 15;private static int yOffset = -13;public static void initOffset(Context context) {//擷取螢幕的密度 context.getResources().getDisplayMetrics().density 設定移動的距離xOffset = (int) (10 * context.getResources().getDisplayMetrics().density);yOffset = -(int) (8 * context.getResources().getDisplayMetrics().density);}public static Animation getRotateAnimation(float fromDegrees,float toDegrees, int durationMillis) {//旋轉,前兩個參數設定旋轉角度,後四個設定旋轉中心RotateAnimation rotate = new RotateAnimation(fromDegrees, toDegrees,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);//期間rotate.setDuration(durationMillis);//動畫結束後,停留在最後一秒rotate.setFillAfter(true);return rotate;}public static void startAnimationsIn(ViewGroup viewgroup, int durationMillis) {for (int i = 0; i < viewgroup.getChildCount(); i++) {ImageButton inoutimagebutton = (ImageButton) viewgroup.getChildAt(i);//顯示圖片inoutimagebutton.setVisibility(View.VISIBLE);MarginLayoutParams mlp = (MarginLayoutParams) inoutimagebutton.getLayoutParams();//位移距離Animation animation = new TranslateAnimation(mlp.rightMargin- xOffset, 0F, yOffset + mlp.bottomMargin, 0F);            //動畫結束後,停留在最後一幀animation.setFillAfter(true);//動畫期間animation.setDuration(durationMillis);//啟動時間animation.setStartOffset((i * 100)/ (-1 + viewgroup.getChildCount()));animation.setInterpolator(new OvershootInterpolator(2F));//加入動畫inoutimagebutton.startAnimation(animation);}}public static void startAnimationsOut(ViewGroup viewgroup,int durationMillis) {for (int i = 0; i < viewgroup.getChildCount(); i++) {final ImageButton inoutimagebutton = (ImageButton) viewgroup.getChildAt(i);MarginLayoutParams mlp = (MarginLayoutParams) inoutimagebutton.getLayoutParams();Animation animation = new TranslateAnimation(0F, mlp.rightMargin- xOffset, 0F, yOffset + mlp.bottomMargin);           animation.setFillAfter(true);animation.setDuration(durationMillis);animation.setStartOffset(((viewgroup.getChildCount() - i) * 100)/ (-1 + viewgroup.getChildCount()));animation.setInterpolator(new AnticipateInterpolator(2F));//設定動畫監聽animation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation arg0) {}@Overridepublic void onAnimationRepeat(Animation arg0) {}                //動畫結束後,隱藏imageButton@Overridepublic void onAnimationEnd(Animation arg0) {inoutimagebutton.setVisibility(View.GONE);}});inoutimagebutton.startAnimation(animation);}}}

這就是全部的實現了。









聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.