首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

【so easy~】 底部菜单可挪动焦点~(仿网易新闻等应用)

2012-09-25 
【so easy~】 底部菜单可移动焦点~!(仿网易新闻等应用)最近比较懒惰,也没有更新博客。今天就把刚刚实现的一个

【so easy~】 底部菜单可移动焦点~!(仿网易新闻等应用)

最近比较懒惰,也没有更新博客。今天就把刚刚实现的一个小效果分享给大家!

http://androiddada.iteye.com/

我的底部菜单是使用ActivityGroup实现的,先上代码,ActivityGroup布局:


?

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    >    <!-- 动态显示界面 -->    <LinearLayout        android:id="@+id/bodyL"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >    </LinearLayout>    <!-- 底部功能菜单栏  -->    <LinearLayout         android:layout_alignParentBottom="true"        android:layout_width="fill_parent"        android:layout_height="60px"        android:orientation="horizontal" >        <LinearLayout            android:id="@+id/home"            android:layout_width="wrap_content"            android:layout_height="fill_parent"            android:layout_weight="5"            android:gravity="center_horizontal"            android:orientation="vertical"            android:background="@drawable/tab_background" >            <ImageView                android:layout_width="32dp"                android:layout_height="35dp"                android:layout_gravity="top|center"                android:layout_marginTop="4dp"                android:background="@drawable/home" />        </LinearLayout>        <LinearLayout            android:id="@+id/gamebox"            android:layout_width="wrap_content"            android:layout_height="fill_parent"            android:layout_weight="5"            android:gravity="center_horizontal"            android:orientation="vertical"            android:background="@drawable/tab_background"  >            <ImageView                android:layout_width="32dp"                android:layout_height="35dp"                android:layout_gravity="top|center"                android:layout_marginTop="4dp"                android:background="@drawable/gamebox" />        </LinearLayout>        <LinearLayout            android:id="@+id/team"            android:layout_width="wrap_content"            android:layout_height="fill_parent"            android:layout_weight="5"            android:gravity="center_horizontal"            android:orientation="vertical"            android:background="@drawable/tab_background"  >            <ImageView                android:layout_width="32dp"                android:layout_height="35dp"                android:layout_gravity="top|center"                android:layout_marginTop="4dp"                android:background="@drawable/team" />        </LinearLayout>        <LinearLayout            android:id="@+id/more"            android:layout_width="wrap_content"            android:layout_height="fill_parent"            android:layout_weight="5"            android:gravity="center_horizontal"            android:orientation="vertical"             android:background="@drawable/tab_background" >            <ImageView                android:layout_width="32dp"                android:layout_height="35dp"                android:layout_gravity="top|center"                android:layout_marginTop="4dp"                android:background="@drawable/more" />        </LinearLayout>    </LinearLayout>    <!-- 底部焦点 使用Imageview 注意要放在RelativeLayout最后 才可遮挡后面的菜单 建议使用半透明图片  -->    <ImageView android:layout_alignParentBottom="true" android:id="@+id/tab_selector" android:layout_width="wrap_content" android:layout_height="60px" android:src="@drawable/tab_highlight"/></RelativeLayout>




?ActivityGroup 代码:

?

public class ActsGroup extends ActivityGroup {private DisplayMetrics _dm = null; // 获得分辨率private ImageView _tab_selector = null; //焦点控件private LinearLayout bodyView;private LinearLayout home, gamebox, team, more;private int flag = 0; // 通过标记跳转不同的页面,显示不同的菜单项private int temp_flag = 0;//private String parameter = Constant.BUTTON_HOME;// 初始化加载public ActsGroup(){_dm = new DisplayMetrics();}/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE); //无标题super.onCreate(savedInstanceState);setContentView(R.layout.acts_group);suitScreen();initMainView();// 主界面开始接收参数Bundle bundle = getIntent().getExtras();if (null != bundle) {flag = bundle.getInt("flag");}// 默认显示 播放界面showView(flag);home.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 0;showView(flag);}});gamebox.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 1;showView(flag);}});team.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 2;showView(flag);}});more.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 3;showView(flag);}});}/* * 初始化主界面底部的功能菜单 */public void initMainView() {bodyView = (LinearLayout) findViewById(R.id.bodyL);home = (LinearLayout) findViewById(R.id.home);gamebox = (LinearLayout) findViewById(R.id.gamebox);team = (LinearLayout) findViewById(R.id.team);more = (LinearLayout) findViewById(R.id.more);}/** * 适应不同分辨率 设置焦点控件的宽度  */private void suitScreen(){getWindowManager().getDefaultDisplay().getMetrics(_dm);_tab_selector = (ImageView) findViewById(R.id.tab_selector);      LayoutParams  para = _tab_selector.getLayoutParams();        para.height = 60;          para.width = _dm.widthPixels>>2; //我底部四个按键所以 每个占1/4宽度        _tab_selector.setLayoutParams(para);  }// 在主界面中显示其他界面public void showView(int flag) {switch (flag) {case 0:showHome();break;case 1:showGamebox();break;case 2:showTeam();break;case 3:showMore();break;default:break;}}/** * 根据不同的temp_flag,flag 生成不同的animation,主要是设置fromX和toX */public void animationShow(){if(temp_flag!=flag){System.out.println("fromX:"+temp_flag/4f+",toX::"+flag/4f);AnimationSet as = new AnimationSet(true);TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, temp_flag/4f, Animation.RELATIVE_TO_PARENT, flag/4f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f);ta.setDuration(500);as.setFillAfter(true);as.addAnimation(ta);_tab_selector.startAnimation(as);temp_flag = flag;}}public void showHome() {bodyView.removeAllViews();bodyView.addView(getLocalActivityManager().startActivity("home",new Intent(ActsGroup.this, Home_Activity.class)).getDecorView());animationShow();}public void showGamebox() {bodyView.removeAllViews();bodyView.addView(getLocalActivityManager().startActivity("gamebox", new Intent(ActsGroup.this, GameBox_Activity.class)).getDecorView());animationShow();}public void showTeam() {bodyView.removeAllViews();bodyView.addView(getLocalActivityManager().startActivity("team",new Intent(ActsGroup.this, GameBox_Activity.class)).getDecorView());animationShow();}public void showMore() {bodyView.removeAllViews();bodyView.addView(getLocalActivityManager().startActivity("more",new Intent(ActsGroup.this, GameBox_Activity.class)).getDecorView());animationShow();}}

?最后的效果是 当你点击不同的底部tab 高亮块儿(选择焦点)会移动到相应位置.

gif效果不太好,动的比较快,大家就看看意思吧,实际效果和网易新闻、机锋市场等应用的效果一样!


【so easy~】 底部菜单可挪动焦点~(仿网易新闻等应用)

?

http://androiddada.iteye.com/

有什么问题可以留言~

1 楼 mjbb 2011-11-18   这gif图片是用什么工具实现的啊? 2 楼 libo19881179 2011-11-18   mjbb 写道这gif图片是用什么工具实现的啊?
豌豆荚 呵呵 3 楼 陈文景 2011-11-25   代码敢不敢给完整?? 4 楼 libo19881179 2011-11-25   mjbb 写道这gif图片是用什么工具实现的啊?
这就是完整的 其他的也不是这里用到的了

热点排行