SlidingMenu的应用实例

来源:互联网 发布:java图形界面时间控件 编辑:程序博客网 时间:2024/04/30 15:15

小小的做了个例子,希望能帮助那些菜鸟


public class ShowActivity extends SlidingFragmentActivity implements OnClickListener {


private int mScreenWidth = 0;// 屏幕宽度
private int mItemWidth = 0;// item宽度
private List<String> sortsList;// 导航的新闻分类集合
private HorizontalScrollView scollview;
private RelativeLayout show_rl;
private ImageView show_seach;
public static ImageView show_left;
private LinearLayout show_scroll_ll;// 横向滚动内的线性布局容器
private ImageView show_add;
private ViewPager show_vp;
private ArrayList<Fragment> fragments = new ArrayList<Fragment>();
// 当前选中的栏目
private int currentSelectIndex = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_show);


// 获取屏幕宽度
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
mScreenWidth = dm.widthPixels;
// 获取Item宽度
mItemWidth = mScreenWidth / 7;
// 初始化layout控件
initID();
//初始化侧滑菜单
initMenu();
}


private void initMenu() {
/* 下面三行设置左菜单fragment */
Fragment leftMenuFragment = new LeftFragment();
setBehindContentView(R.layout.left_menu_frame);// 在SlidingMenu中把left_menu_frame.xml作为左菜单的容器
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_framelayout, leftMenuFragment).commit();// 把具体的左菜单fragment替换到容器中


SlidingMenu menu = getSlidingMenu();
menu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置触摸屏幕的模式
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
// 设置滑动菜单视图的宽度
menu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth()*1/5);
// menu.setBehindWidth()
// 设置渐入渐出效果的值
menu.setFadeDegree(0.35f);
// menu.setBehindScrollScale(1.0f);
/* 下面三行设置右菜单fragment */
menu.setSecondaryMenu(R.layout.right_menu_frame);// 设置右边侧滑菜单布局文件
Fragment rightMenuFragment = new RightFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.right_menu_framelayout, rightMenuFragment).commit();
}


private void initID() {
// 左菜单的显示按钮
show_left = (ImageView) findViewById(R.id.show_left);
show_left.setOnClickListener(this);
// 右菜单的显示按钮
show_seach = (ImageView) findViewById(R.id.show_seach);
show_seach.setOnClickListener(this);
// 包括horizontalscrollview的容器
show_rl = (RelativeLayout) findViewById(R.id.show_rl);
// 找到HorizontalScrollView
scollview = (HorizontalScrollView) findViewById(R.id.show_scrollview);
// 找到scrollview内部的容器
show_scroll_ll = (LinearLayout) findViewById(R.id.show_scroll_ll);
// 找到获取更多选项的按钮
show_add = (ImageView) findViewById(R.id.show_add);
// 找到vp
show_vp = (ViewPager) findViewById(R.id.show_vp);
// 当栏目项发生变化时调用
setChangelView();


}


/**
* 当栏目项发生变化时调用
*/
private void setChangelView() {
// 初始化导航展示数据
initColumnData();
// 初始化Column栏目项
initTabColumn();
initFragment();
}


private void initColumnData() {
sortsList = Arrays.asList("推荐", "热点", "北京", "社会","娱乐",
"科技", "订阅","视频", "汽车", "体育", "财经", "军事", "国际", "段子", "趣图", "美女", "健康",
"正能量", "特卖");
}


private void initTabColumn() {
show_scroll_ll.removeAllViews();// 先清空子元素
// 得到新闻分类的size
int count = sortsList.size();
// 向滚动条中加入文字TextView,并设置Selector选中的背景
for (int i = 0; i < count; i++) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
mItemWidth, LayoutParams.WRAP_CONTENT);
params.leftMargin = 10;
params.rightMargin = 10;
TextView textView = new TextView(this);
textView.setGravity(Gravity.CENTER);
textView.setPadding(5, 0, 5, 0);
textView.setText(sortsList.get(i));
textView.setTextColor(getResources().getColorStateList(R.color.top_category_scroll_text_color_day));
if (currentSelectIndex == i) {
textView.setSelected(true);
}
textView.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
for (int i = 0; i < show_scroll_ll.getChildCount(); i++) {
View localView = show_scroll_ll.getChildAt(i);
if (localView != v)
localView.setSelected(false);
else {
localView.setSelected(true);
show_vp.setCurrentItem(i);
}
}
}
});
show_scroll_ll.addView(textView, i, params);
}
}
/** 
*  选择的Column里面的Tab,通过这个方法对对应的菜单项,在滚动时进行滚动切换
* */
private void selectTab(int tab_postion) {
currentSelectIndex = tab_postion;
for (int i = 0; i < show_scroll_ll.getChildCount(); i++) {
View checkView = show_scroll_ll.getChildAt(tab_postion);
int k = checkView.getMeasuredWidth();
int l = checkView.getLeft();
int i2 = l + k / 2 - mScreenWidth / 2;//计算要滚动到的位置
scollview.smoothScrollTo(i2, 0);
}
//判断是否选中,从而改变背景色
for (int j = 0; j <  show_scroll_ll.getChildCount(); j++) {
View checkView = show_scroll_ll.getChildAt(j);
boolean ischeck;
if (j == tab_postion) {
ischeck = true;
} else {
ischeck = false;
}
checkView.setSelected(ischeck);
}
}
private void initFragment() {
int count = sortsList.size();
for (int i = 0; i < count; i++) {
Bundle data = new Bundle();
data.putString("text", sortsList.get(i));
NewsFragment newfragment = new NewsFragment();
newfragment.setArguments(data);
fragments.add(newfragment);
}
NewsFragmentPagerAdapter mAdapetr = new NewsFragmentPagerAdapter(
getSupportFragmentManager(), fragments);
show_vp.setAdapter(mAdapetr);
show_vp.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int arg0) {
selectTab(arg0);
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageScrollStateChanged(int arg0) {

}
});
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.show_left:
Log.i("show", "左菜单应该出来才对");
getSlidingMenu().showMenu();
break;
case R.id.show_seach:
getSlidingMenu().showSecondaryMenu();
break;


case R.id.show_add:


break;
}
}


}


//以下是使用xlistview进行上拉下拉


import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;


import com.exam.adapter.MyBaseAdapter;
import com.exam.http.HttpRequestJSONData;
import com.exam.todaytop.InfoActivity_WebView;
import com.exam.todaytop.R;
import com.exam.utils.MyMapUtils;
import com.exam.utils.XListView;
import com.exam.utils.XListView.IXListViewListener;
import com.exam.vo.MyData;
import com.exam.vo.MyObject;
import com.google.gson.Gson;


import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;


public class NewsFragment extends Fragment implements IXListViewListener{


private String text;
private int i=0;
private XListView lv;
private String urlStr;
private List<MyData> list;
private boolean flags=true;
private MyBaseAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
Bundle args = getArguments();
text = args != null ? args.getString("text") : "";// 从Activity中传入的文字
super.onCreate(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(
R.layout.news_fragment, null);
lv = (XListView) view.findViewById(R.id.news_fragment_listview);
lv.setPullLoadEnable(true);
lv.setPullRefreshEnable(true);
lv.setXListViewListener(this);
list = new ArrayList<MyData>();
Map<String, String> map = MyMapUtils.geturlStr();
urlStr = (String) map.get(text);
if (map.get(text) != "") {
new MyAsyncTask().execute();
} else {
}
lv.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {


Intent intent = new Intent(getActivity(),
InfoActivity_WebView.class);
intent.putExtra("url", list.get(arg2-1).getDisplay_url());
startActivity(intent);
getActivity().overridePendingTransition(R.anim.activity_in,
R.anim.activity_out);

/*// 点击条目,跳转到详情页面
Intent intent = new Intent(getActivity(),
InfoActivity.class);
intent.putExtra("group_id", data.get(arg2).getGroup_id());
startActivity(intent);
getActivity().overridePendingTransition(R.anim.activity_in,
R.anim.activity_out);*/
}
});
return view;
}


@Override
public void onRefresh() {
if(urlStr!=""){
new MyAsyncTask().execute();
}
}


@Override
public void onLoadMore() {
if(urlStr!=""){
new MyAsyncTask02().execute();
}
}
class MyAsyncTask extends AsyncTask<String, Void, List<MyData>>{


@Override
protected List<MyData> doInBackground(String... params) {
String jsonData = HttpRequestJSONData.getJSONData(urlStr+i);
Gson gson = new Gson();
MyObject myObj = gson.fromJson(jsonData, MyObject.class);
List<MyData> data =  myObj.getData();
list.addAll(data);
i++;
return data;
}

@Override
protected void onPostExecute(List<MyData> result) {
if(flags){
adapter = new MyBaseAdapter(getActivity(), result);
lv.setAdapter(adapter);
flags=false;
}else{
adapter.setList(result);
adapter.notifyDataSetChanged();
//设置刷新时间
onLoad();
lv.stopRefresh();

}

super.onPostExecute(result);
}

}
class MyAsyncTask02 extends AsyncTask<String, Void, List<MyData>>{


@Override
protected List<MyData> doInBackground(String... params) {
String jsonData = HttpRequestJSONData.getJSONData(urlStr+i);
Gson gson = new Gson();
MyObject myObj = gson.fromJson(jsonData, MyObject.class);
List<MyData> data =  myObj.getData();
list.addAll(data);
i--;
return list;
}

@Override
protected void onPostExecute(List<MyData> result) {
adapter.setList(result);
adapter.notifyDataSetChanged();
lv.stopLoadMore();

super.onPostExecute(result);
}

}
/*设置头部刷新时间*/
private void onLoad() {
lv.stopRefresh();
lv.stopLoadMore();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String nowTime=df.format(new Date(System.currentTimeMillis()));// 获取当前系统时间
lv.setRefreshTime(nowTime);//释放时提示正在刷新时的当前时间
}

}



0 0
原创粉丝点击