`
libo19881179
  • 浏览: 269809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【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. */
	@Override
	public 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 stub
				flag = 0;
				showView(flag);
			
			}
		});
		gamebox.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				flag = 1;
				showView(flag);

			}
		});
		team.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				flag = 2;
				showView(flag);
			
			}
		});
		more.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				flag = 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效果不太好,动的比较快,大家就看看意思吧,实际效果和网易新闻、机锋市场等应用的效果一样!


 

http://androiddada.iteye.com/

有什么问题可以留言~

  • 大小: 132.1 KB
1
0
分享到:
评论
4 楼 libo19881179 2011-11-25  
mjbb 写道
这gif图片是用什么工具实现的啊?

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

豌豆荚 呵呵
1 楼 mjbb 2011-11-18  
这gif图片是用什么工具实现的啊?

相关推荐

    今日头条仿网易新闻TopNews

    综上所述,"今日头条仿网易新闻TopNews"是一个面向Android用户的新闻阅读应用,它复制了网易新闻的主要功能,如多类别新闻展示、动态加载、个性化推荐、评论互动等,并可能对性能进行了优化,为用户提供便捷的新闻...

    SoEasy办公效率平台

    "SoEasy办公效率平台"是一款专为提升个人和团队办公效率设计的应用软件。这款平台集成了多种实用功能,旨在简化日常办公任务,提高工作效率。作为一款"办公好助手",它可能包含了文档管理、项目协作、日程规划、任务...

    [] - 2022-09-27 Spring Boot + minio 实现高性能存储服务,So Easy~!.pdf

    互联网资讯,技术简介,IT、AI技术,人工智能

    物联网So Easy 基于Blynk平台的IOT项目实践 配套资源

    物联网So Easy 基于Blynk平台的IOT项目实践 配套资源 本书是经典的、畅销的Spring学习和实践指南。第5版针对Spring 5进行了全面更新。第5版涵盖了Spring 5.0和Spring Boot 2.0里程碑式的更新。 全书分为5个部分,...

    EasyAR插件!!!!!!!!!

    本文将详细介绍EasyAR插件及其在Unity中的应用。 EasyAR插件概述: EasyAR是一款跨平台的AR引擎,支持多种设备,包括智能手机、平板电脑以及智能眼镜等。它为开发者提供了丰富的API和工具,用于构建AR应用,如图像...

    soeasy软件

    SoEasy办公效率平台,为提供办公人员办公必备工具,是全国最全面、最专业、最实用的办公辅助工具,专为提升办公能力,及办公效率的学习平台,由数名微软金牌讲师、资深顾问等组成的专家团队,以快速提升个人工作效率...

    基于android的移动应用中英文电子词典源码(so easy).zip

    本项目"基于Android的移动应用中英文电子词典源码(so easy)"提供了一个简单易懂的源码示例,帮助开发者快速理解和实践Android应用开发。 首先,这个应用的核心功能是词典查询。它可能包含以下几个关键组件: 1. ...

    Office资源宝库SoEasy办公效率平台 v4.0.11.5.exe

    SoEasy办公效率平台是一款办公人员必备工具。提供最易用、最集中、最专业OFFICE资源。   SoEasy办公效率平台功能: 1、包含Office中多个组件海量培训视频(Word,Excel,PowerPoint,Outlook等)。 2、文档及PPT...

    温度报警器SOEASY2010说明书

    温度报警器SOEASY2010说明书

    Mac中的EasyConnect应用的dmg安装资源!亲测有效

    Mac中的EasyConnect应用的dmg安装资源!亲测有效

    Office资源宝库-SoEasy办公效率平台

    Office资源宝库-SoEasy办公效率平台,是一款实用的办公辅助软件,辅助办公人员更好的应用ppt、excel、word等办公软件。软件提供视频教程、模板、图片、vba开发的小工具、各种文档资源、在线求助等功能。免费下载。

    基于BYOD模型下的SOEASY智能训练系统的高职英语AB级辅导的应用探究.pdf

    【SOEASY智能训练系统与BYOD模型在高职英语AB级辅导中的应用】 在当前的教育环境下,如何提高高职院校非英语专业学生的综合英语能力成为一个关键议题。全国高等学校英语应用能力考试(PRETCO),即大学英语AB级考试...

    SoEasy资源管理器

    2、支持一般的文件操作,如搜索、复制、移动、改名、删除、新建文件夹等功能应有尽有; 3、特有的网络校时功能,使得电脑时间与网络时间随时同步; 4、特有的文件夹历史记录管理功能,切换目录更加快捷方便; 5、...

    仿网易云音乐源码.rar

    通过深入研究这个E4A仿网易云音乐源码,开发者不仅可以提升E4A编程技能,还能掌握Android应用开发的一般流程和常见技术,对于个人的编程能力提升大有裨益。无论是对E4A感兴趣的初学者还是有一定经验的开发者,都能从...

    高二英语必修三必背的句型例句,掌握可期中考试Soeasy!------.pdf

    高二英语必修三必背的句型例句,掌握可期中考试Soeasy!------.pdf

    adams和easy5联合仿真教程

    ADAMS(Automatic Dynamic Analysis of Mechanical Systems)是一个著名的机械系统动力学仿真软件,它可以分析多体系统动力学行为,广泛应用于汽车行业、航空航天、机器人制造等领域。ADAMS可以通过创建精确的机械...

    Android应用设计源码-中英文电子词典源码so easy

    本项目“Android应用设计源码-中英文电子词典源码so easy”提供了这样一个实例,对于初学者或希望提升Android技能的开发者来说,是一个宝贵的资源。 首先,我们要了解Android应用的基本结构。一个标准的Android应用...

    Android中英文电子词典源码(so easy).zip项目安卓应用源码下载

    Android中英文电子词典源码(so easy).zip项目安卓应用源码下载Android中英文电子词典源码(so easy).zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    基于So Easy英语智能训练系统的反拨效应研究.pdf

    【系统开发与应用】在当前移动学习和泛在学习的潮流中,So Easy系统利用移动设备的便携性,让学生能够随时随地进行英语学习。研究发现,正确引导学生使用手机进行学习,不仅能够提高学习效率,还能提升教学质量。该...

Global site tag (gtag.js) - Google Analytics