Android之SlideMenu實例Demo


年末加班基本上一周都沒什么時候回家寫代碼,回到家就想睡覺,周末難得有時間寫個博客,上次寫了一篇關於SlideMenu開源項目的導入問題,這次主要講講使用的問題,SlideMenu應用的廣泛程度就不用說了,基本上是App的標配,關於SlideMenu的各種使用方法有很多,網上各種Demo也很多,想來想去還是按照自己本身的實戰方式去寫寫吧,走過的坑希望大家基本上不會遇到,開始正題:

基礎布局

寫布局文件之前先看下最終的效果圖,昨天紅色就是滑動出現的區域,右邊的圖片由左邊的事件觸發:

activity_main.xml中的布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.slidemenu.MainActivity" >

    <ListView
        android:id="@+id/list_base"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</FrameLayout>

 menu_frame.xml中主要是用於右邊顯示布局,單獨寫出來一個是為了方便以后的替換:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:id="@+id/menu_frame">
    

</FrameLayout>

  slide_menu.xml中主要用來顯示SlideMenu中的數據,最后通過代碼區

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_slide"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</ListView>

  list_item中的布局文件,之后自定義的Adapter會用到:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
    <ImageView 
        android:id="@+id/list_image"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
   

</LinearLayout>

實例Demo

首先MainActivity導入開源項目包(如果導入有問題可以參考本人的上一篇文章)之后繼承SlidingFragmentActivity;

自定義 實例化Slide_Menu.xml的類:

public class MyMenuFragment extends Fragment implements OnItemClickListener {

	private View view;
	private String[] listArrStrings=new String[]{"鷹"," 鷺","火烈鳥"};
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		view=LayoutInflater.from(getActivity()).inflate(R.layout.slide_menu, null);
		return view;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
		ListView  listView=(ListView) view.findViewById(R.id.list_slide);
		listView.setAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, listArrStrings));
		listView.setOnItemClickListener(this);
	}

	
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		// TODO Auto-generated method stub

		if(getActivity() instanceof MainActivity){
			((MainActivity)getActivity()).changeImage(position);
		}
	}

}

  onCreate中方法中調用:

	super.onCreate(savedInstanceState);
		setBehindContentView(R.layout.menu_frame);
		setContentView(R.layout.activity_main);
		slidingMenu = getSlidingMenu();
		slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
		slidingMenu.setBehindWidth(80);
		
     
		MyMenuFragment menuFragment = new MyMenuFragment();
		getSupportFragmentManager().beginTransaction()
				.replace(R.id.menu_frame, menuFragment, "MyMenu").commit();

  MyMenuFragment中如果回調MainActivity調用的方法:

	public  void  changeImage(int index){
		ListView view=(ListView) findViewById(R.id.list_base);
		switch (index) {
		case 0:
			view.setAdapter(new MyListAdapter(this, R.drawable.eagle));
			break;
		case 1:
			view.setAdapter(new MyListAdapter(this, R.drawable.heron));
			break;
		case 2:
			view.setAdapter(new MyListAdapter(this, R.drawable.flamingo));
			break;
		default:
			break;
		}
	}

  最后是自定義的MyListAdapter:

 public class MyListAdapter extends BaseAdapter{

	 private int resourceID;
	 private LayoutInflater inflater;
	public MyListAdapter(Context context,int resId){
		inflater=LayoutInflater.from(context);
		resourceID=resId;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 3;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View view=null;
		if (convertView==null) {
		  view=inflater.inflate(R.layout.list_item,null);
		}else{
			view=convertView;
		}
		ImageView imageView=(ImageView) view.findViewById(R.id.list_image);
		imageView.setImageResource(resourceID);
		return view;
	}
	  
  }

本人只是設置左滑動,其實還是設置右滑動,設置左右滑動通過setSecondaryMenu設置;

 最后看下火烈鳥吧,老外還是比較愛護動物的,以上都是開源項目SlideMenu中的圖片:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM