完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画
来源:互联网 发布:tarjan算法 编辑:程序博客网 时间:2024/05/16 01:43
先看看百度手机助手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://download.csdn.net/detail/h3c4lenovo/5992279
- 完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画
- 完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画
- Android开源库-仿360手机助手底部动画菜单布局
- Android开源库-仿360手机助手底部动画菜单布局
- Android TabHost +Fragment 实现底部菜单栏
- Android TabHost +Fragment 实现底部菜单栏 .
- Android开发Tabhost+RadioGroup实现底部菜单栏
- Android底部菜单栏(tabhost实现)
- Android底部菜单栏(用TabHost一次性加载耗内存)
- Android底部菜单栏(用TabHost一次性加载耗内存)
- Android底部菜单栏(用TabHost一次性加载耗内存)
- android tabhost底部菜单栏实现原理与代码
- 底部菜单栏实现之TabHost
- 底部菜单栏(一) TabHost实现
- Android UI设计 屏幕底部的菜单栏 动画切换Activity
- android实现底部菜单栏
- android实现底部菜单栏
- Android底部菜单栏设计
- 详解 Qt Configure 参数不完全说明介绍
- 总结一些更多的针对webkit的HTML, CSS和Javascript方面的特性.
- 来自runjs.cn中的自动吸附拖曳案例
- RedHead 6.4(32bit)安装Oracle11g R2
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
- 完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画
- sql注入,以及如何防止
- 【浅谈安装MRTG及在Win7系统上开启端口的问题】
- QT中PRO文件写法的详细介绍(转)
- 修改svn地址
- 实用MSSQL表值函数fn_Split轻松解决存储过程中需Split参数的处理
- 弄懂SPI接口
- 机房的带外管理---远程管理你的开发测试机
- MSVCRTD.lib(wcrtexe.obj) : error LNK2001: unresolved external symbol wmain