完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画
先看看百度手机助手5.0的样子:
发现他是用一个CustomTabHost.java来实现底部TabHost点击效果的,很漂亮,点击Tab的时候文字会上跑,图片会从底部跑出来的一个小动画。
下面我用自己的方法逆袭了他的CustomTabHost,感觉用起来比它的好用,而且简单不少!
本文只给出关键代码,需要工程的自行下载:
package com.wj.ring5577.ui; import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener; import com.wj.ring5577.R; public class MainActivity extends FragmentActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); TabHost tabHost = (TabHost) findViewById(R.id.tabhost);
tabHost.setup(); // Call setup() before adding tabs if loading TabHost
// using findViewById(). final WJTabMenuView mv = (WJTabMenuView) LayoutInflater.from(this)
.inflate(R.layout.test, null);
mv.setText("Tag A");
final WJTabMenuView mv2 = (WJTabMenuView) LayoutInflater.from(this)
.inflate(R.layout.test, null);
mv2.setText("Tag B");
final WJTabMenuView mv3 = (WJTabMenuView) LayoutInflater.from(this)
.inflate(R.layout.test, null);
mv3.setText("Tag C");
final WJTabMenuView mv4 = (WJTabMenuView) LayoutInflater.from(this)
.inflate(R.layout.test, null);
mv4.setText("Tag D"); tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
mv.unSelected();
mv2.unSelected();
mv3.unSelected();
mv4.unSelected();
if (tabId.equals("taba")) {
mv.selected();
} else if (tabId.equals("tabb")) {
mv2.selected();
} else if (tabId.equals("tabc")) {
mv3.selected();
} else if (tabId.equals("tabd")) {
mv4.selected();
}
}
}); tabHost.addTab(tabHost.newTabSpec("taba").setIndicator(mv)
.setContent(R.id.tab1));
tabHost.addTab(tabHost.newTabSpec("tabb").setIndicator(mv2)
.setContent(R.id.tab2));
tabHost.addTab(tabHost.newTabSpec("tabc").setIndicator(mv3)
.setContent(R.id.tab3));
tabHost.addTab(tabHost.newTabSpec("tabd").setIndicator(mv4)
.setContent(R.id.tab4)); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
package com.wj.ring5577.ui; import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; import com.wj.ring5577.R; /**
* Tab底部菜单视图
*
* @author Harris
*
*/
public class WJTabMenuView extends LinearLayout {
private TextView mTextView = null;
private ImageView mImageView = null;
private boolean interruptFlag;
private Context mContext;
private Animation mAnim_txt;
private Animation mAnim_img; public WJTabMenuView(Context context) {
super(context);
mContext = context;
} public WJTabMenuView(Context context, AttributeSet attrs) {
super(context, attrs); LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.wjtabmenulayout, this);
mTextView = (TextView) findViewById(R.id.wjtabmenu_tv);
mImageView = (ImageView) findViewById(R.id.wjtabmenu_iv);
mContext = context;
mAnim_txt = AnimationUtils.loadAnimation(mContext,
R.anim.bottommenu_txt_anim);
mAnim_txt.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
} @Override
public void onAnimationRepeat(Animation animation) {
} @Override
public void onAnimationEnd(Animation animation) {
if (!interruptFlag) {
mTextView.setVisibility(View.GONE);
}
}
}); mAnim_img = AnimationUtils.loadAnimation(mContext,
R.anim.bottommenu_img_anim);
} public void setText(String title) {
mTextView.setText(title);
} /**
* 放弃选择
*/
public void unSelected() {
interruptFlag = true;
clearAnimation();
mTextView.setVisibility(View.VISIBLE);
} /**
* 选中
*/
public void selected() {
interruptFlag = false;
mTextView.startAnimation(mAnim_txt);
mImageView.startAnimation(mAnim_img);
}
}
如果你觉得好,请帮忙下载
http://www.5577.com/5577.apk
。
源码:
http://download.csdn.net/detail/h3c4lenovo/5992279
完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画的更多相关文章
- Android 仿百度手机助手首页滑动效果
今天看到百度手机助手首页上的滑动效果非常nice,主要功能归结为: 1.当手指上划时,顶部搜索栏随手指移动距离而缩小到隐藏,隐藏后内容还是可以继续移动 2.手指下滑时,当显示内容达到第一个时,顶部搜索 ...
- 安卓app上传到应用宝、360手机助手、小米应用商店、百度手机助手/安卓市场/91助手
1.小米应用商店 小米开放平台网站:https://account.xiaomi.com 注册帐号教程地址:http://dev.xiaomi.com/doc/?p=90 应用提交流程:http:// ...
- Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?
[电脑软件管理中Bdsyn手机助手的问题]Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Infor ...
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有非常多朋友都问过我.在Android系统中如何才干实现静默安装 ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Anroid 手机助手 详细解析 概述(二)
这篇主要说一下手机插入之后的一些动作. 1) 捕获窗口消息 插入拔出一个USB设备windows 会给所有的窗口发送特定的消息,只要我们捕获这些消息就可以处理设备插入和拔出.需要注意的是插入或者拔出 ...
- 解决手机助手与 android sdk 的adb 冲突问题
现象:手机助手与 sdk 内的 adb冲突,用助手与真机连接后,sdk adb 就被干掉了 突发奇想: 突然有一天想到用助手的adb来覆盖sdk内的adb,果然奏效.现在eclipse.助手.cmd窗 ...
- 2星|《腾讯产品法》:标题党,作者只有QQ手机助手的短期产品经验
腾讯产品法(一本书读懂腾讯产品思维与运营方法,<腾讯传>作者吴晓波推荐) 全书是作者的一些产品设计与运营的经验.如果书名不误导读者,这本书的内容值3星. 基于书名的误导,读后比较失望,作者 ...
随机推荐
- ios 键盘弹起
#pragma mark 键盘弹起操作 - (void)keyboardWillShow:(NSNotification *)notification{ NSDictionary *info = ...
- 获取当前页面的url
var url = window.location.href; var b = url.substring(url.lastIndexOf('/')+1, url.length);
- Java学习----创建对象的数组
1.初始化数组的长度 2.初始化每个元素对象 3.调用每个对象的方法 public class Student { private String name; public Student() {} p ...
- [翻译]jQuery十周年-John Resig
10th Anniversary of jQuery Today marks the 10th anniversary of the release of jQuery...[原文] 今天是jQuer ...
- Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)
Centos下安装配置LAMP(Linux+Apache+MySQL+PHP) 关于LAMP的各种知识,还请大家自行百度谷歌,在这里就不详细的介绍了,今天主要是介绍一下在Centos下安装,搭建一 ...
- import uno 错误
安装aeroolib 模块后,提示没有 uno 相关段一些模块, 原因是这些模块是 openoffice 中段,需要先安装 openoffice. 1:清除所有 libreoffice 软件, su ...
- WAMP集成环境更改web根目录
使用WAMP集成环境,如何更改web根目录 做php开发使用WAMP集成环境的同学大部分有过这样的经历:如果你试图修改web根目录,那么你肯定会想到要修改apache/apache2.2.11/con ...
- oracle常见为题汇总,以及一个简单数据连接操作工厂
本人软件环境:win8.1 64位操作系统,vs2013,安装好了与oracle数据库对应的客户端 连接oracle数据库.以及操作数据库 1.使用IIS建立网站,浏览网页时候,提示“ ...
- IIS10 设置支持wcf服务(.svc)
感谢: http://www.cnblogs.com/dudu/p/3328066.html 如果提示web.config配置重复的话,很有可能是.net framework版本的问题,把IIS中的版 ...
- 如何更好辨认House of hello恶搞包的真假
相信很多朋友都知道houseofhello恶搞包这个品牌,甚至很多朋友都买过,首先呢,她是恶搞包,算自主品牌,它无淘宝店,更没有所谓的香港实体店.因为这品牌受到广大朋友的狂热,导致无数仿品的出现,淘宝 ...