`
wangleyiang
  • 浏览: 221712 次
社区版块
存档分类
最新评论

Android 添加动画的标签栏

阅读更多

运行效果图:


 

 

实现原理:标签布局好了以后,标签所在View响应onClick事件。添加另外的标签View,不响应点击事件,用于实现动画效果。在标签的onClick事件中调整移动的起始位置,和滑动标签的状态。

 

布局文件activity_label.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dip"
        android:background="@android:drawable/title_bar" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:orientation="horizontal" >

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/label_1"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="图片" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/label_2"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="地图" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/label_3"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="搜索" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/label_4"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="问答" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/label_5"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="新闻" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/label_6"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="更多" />
            </RelativeLayout>
        </LinearLayout>

        <TextView
            android:id="@+id/label_move"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:background="@android:drawable/editbox_background"
            android:gravity="center"
            android:text="图片" />
    </RelativeLayout>

</LinearLayout>

说明:

  • 为了让被点击的标签所占区域更大,使用了android:layout_height="fill_parent"设置;
  • 使用android:layout_weight="1"控制显示的相对大小;

主要代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;

public class LabelActivity extends Activity implements OnClickListener {
	
	/**
	 * 标签字符
	 */
	private String[] labelValues = {"图片", "地图", "搜索", "问答", "新闻", "更多"};

	/**
	 * 标签数组
	 */
	private TextView[] labelViews = new TextView[6];

	/**
	 * 动画标签
	 */
	private TextView labelMove;

	/**
	 * 标签宽度
	 */
	private int labelWidth;

	/**
	 * 移动开始位置
	 */
	private int fromX;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_label);
		
		setTitle("标签");
		
		// 获得标签引用
		labelViews[0] = (TextView) findViewById(R.id.label_1);
		labelViews[1] = (TextView) findViewById(R.id.label_2);
		labelViews[2] = (TextView) findViewById(R.id.label_3);
		labelViews[3] = (TextView) findViewById(R.id.label_4);
		labelViews[4] = (TextView) findViewById(R.id.label_5);
		labelViews[5] = (TextView) findViewById(R.id.label_6);
		labelMove = (TextView) findViewById(R.id.label_move);
		
		// 添加点击事件
		for (int i = 0, length = labelViews.length; i< length; i++) {
			labelViews[i].setOnClickListener(this);
		}
		
		// 获得并设置标签宽度
		WindowManager windowManager = getWindowManager();
		Display display = windowManager.getDefaultDisplay();
		labelWidth = display.getWidth() / 6;
		labelMove.setWidth(labelWidth);
		
	}

	@Override
	public void onClick(View v) {
		
		int index = 0;
		switch (v.getId()) {
		case R.id.label_1:
			index = 0;
			break;
		case R.id.label_2:
			index = 1;
			break;
		case R.id.label_3:
			index = 2;
			break;
		case R.id.label_4:
			index = 3;
			break;
		case R.id.label_5:
			index = 4;
			break;
		case R.id.label_6:
			index = 5;
			break;
		default:
			return;
		}
		
		// 移动View
		translate(labelMove, fromX, labelWidth * index);
		// 设置标题
		labelMove.setText(labelValues[index]);
		// 更新fromX,为下次移动做准备
		fromX = labelWidth * index;

	}
	
	/**
	 * 将View从(fromX,0)移动到(toX,0)
	 * @param view
	 * @param fromX
	 * @param toX
	 */
	public static void translate(View view, int fromX, int toX) {
		TranslateAnimation translateAnimation = new TranslateAnimation(fromX, toX, 0, 0);
		translateAnimation.setDuration(200);
		translateAnimation.setFillAfter(true);
		view.startAnimation(translateAnimation);
	}

}

 说明:

  • labelMove:用于移动和标识被选中标签的View,可以通过改变这个View的属性来达到想要的选中效果;
  • translate:把View水平方向移动;
  • onClick中的switch获得需要的index,然后设置labelMove的属性和下次移动水平的开始位置;

 

 

 

 

 

  • 大小: 18.4 KB
  • 大小: 18.4 KB
  • 大小: 18.3 KB
分享到:
评论

相关推荐

    自定义viewpager的顶部标签栏

    总的来说,自定义`viewpager`的顶部标签栏涉及到Android组件的使用、自定义视图、事件处理、页面切换监听以及动画效果的实现,是一个集成了多种Android开发技能的综合实践。通过这个项目,我们可以深入理解Android ...

    android 渐进弹出底部标签

    除了手动编写动画代码,Android还提供了`BottomNavigationView`组件,这是一个内置的底部标签栏控件,可以简化开发过程。但是,如果要实现特定的动画效果,可能仍需自定义动画逻辑。 总结起来,实现“渐进弹出底部...

    Android界面云标签效果

    1. **动画处理**:云标签效果的关键在于动画,Android提供了多种动画机制,如`ObjectAnimator`、`ValueAnimator`、`PropertyAnimator`等。我们可以利用这些工具实现关键词的大小变化、淡入淡出、随机移动等动画效果...

    Android 底部导航栏凸出点击

    在Android应用开发中,底部导航栏...总之,“Android 底部导航栏凸出点击”是一个提高用户界面互动性的设计,通过自定义样式、触摸反馈、动画和事件监听,我们可以实现这个功能,提升用户在移动应用中的操作体验。

    Android自动换行标签控件LineBreakLayout

    - 应用商店的分类标签栏 - 新闻应用的标签导航 - 用户设置界面的切换选项 6. **注意事项** - 确保所有子视图的宽度都是wrap_content,以便`LineBreakLayout`能够正确计算换行。 - 如果标签数量过多,可能需要...

    Android 顶部导航栏demo

    11. **动画效果**: 可以添加过渡动画,如滑入滑出,以增强用户体验。这通常涉及到对`animate()`方法的使用。 12. **响应式设计**: 考虑到不同设备的屏幕尺寸,应确保顶部导航栏在各种屏幕大小上都能正确显示。这...

    Android--底部菜单栏实现

    此外,考虑到"工具"标签,可能还会涉及自定义样式、动态加载菜单项、添加动画效果等进阶话题。`SinaWeibo`这个文件名可能是指用新浪微薄的案例来演示或者作为示例数据,具体实现要看原文档的详细内容。 总之,创建...

    Android-TabBar-master标签栏控件支持自定义圆角弧度

    - `Android-TabBar-master`可能还提供了自定义动画效果的选项,如平滑过渡、渐变颜色变化等。开发者可以通过设置动画类,如`ObjectAnimator`或`ValueAnimator`,并结合`TabBar`的回调方法来实现这些效果。 5. **...

    Android中ListView切换批量模式动画效果.rar

    本资源"Android中ListView切换批量模式动画效果.rar"提供了一种实现ListView批量模式切换时的动画效果,包括顶部栏、底部栏以及CheckBox的变化。 批量模式通常涉及到多个CheckBox的选择状态切换,而动画效果可以...

    Android实现类似浏览器可以新增标签页,可以随意多个标签之间来回切换

    - 用户界面的设计应直观易用,标签栏的位置、颜色和字体大小需符合用户习惯。标签页的数量限制也需考虑,过多的标签可能会使界面显得拥挤,可以通过下拉菜单或滑动手势访问更多标签。 - 每个标签页内的布局设计应...

    Android标签的显示

    为了提高用户体验,可以给标签添加动画效果,如滑动、淡入淡出等。Android的`ObjectAnimator`和`ValueAnimator`可以帮助实现这些效果。 10. **多语言支持** 对于显示在界面上的标签,应考虑多语言环境。可以使用...

    Android实现网易严选标签栏滑动效果

    标签栏是一个非常常见的控件,似乎也是一个比较简单的控件,但如果在标签下方加个下划线的话,就还是可以玩出挺多花来的。 网易严选的标签栏就做的很不错,里面隐藏着诸多细节: 手动滑动页面,下划线会跟着滑动。...

    Android 自定义底部导航栏&消息显示

    首先,底部导航栏在Android应用中用于在主要的几个功能之间切换,通常包含3到5个图标和相应的标签。Android设计指南推荐使用BottomNavigationView组件来实现这一功能。但为了自定义样式和交互,开发者可能会选择自己...

    android滑动标签页实现

    `ViewPager`允许用户左右滑动来切换页面,而`FragmentTabHost`则提供了标签栏的管理。 **1. Android的Fragment概念** 在Android 3.0及以上版本引入了`Fragment`,它是一个可插入到Activity中的UI组件。`Fragment`有...

    Android 自定义底部导航栏+消息数量显示

    总的来说,自定义Android底部导航栏并添加消息数量显示是一个涉及布局设计、事件处理、数据同步和UI交互的综合实践。通过这样的实践,开发者不仅可以掌握Android UI组件的使用,还能了解到如何提高应用的用户体验。

    Fragment实现qq底部标签栏

    在本教程中,我们将探讨如何利用Fragment实现类似QQ底部标签栏的效果,这通常用于切换不同的功能模块,如聊天、发现、联系人等。以下是关于这个主题的详细讲解。 1. **Fragment基本概念**: - Fragment是Android中...

    Android 简化 自定义标题栏

    在Android应用开发中,自定义标题栏是一种常见的需求,它能帮助我们打造出具有独特风格的用户界面。"Android简化自定义标题栏"这个主题旨在帮助开发者快速、高效地实现这一功能,无需过于复杂的代码和设计。下面将...

    标签栏点击增删长按拖拽排序.zip

    这样的功能提升了用户体验,让用户可以根据自己的喜好调整标签栏的布局。下面将详细解释这一技术实现的各个关键点。 首先,"标签栏"通常指的是应用界面上用于展示多个功能或内容分类的横排或竖排的标签,用户可以...

    Android实现底部切换标签

    每个`item`代表一个底部导航栏的标签,`android:id`用于标识,`android:icon`设置图标,`android:title`设置显示的文字。 现在我们有了UI布局,接下来是逻辑部分。在Activity中,我们需要监听BottomNavigationView...

    Androidstudio制作微信导航栏的素材库______微信素材库.zip

    Android Studio支持添加自定义动画到`BottomNavigationView`,如切换页面时的淡入淡出效果。 7. **适配不同屏幕尺寸**:确保你的导航栏设计能在各种屏幕尺寸和分辨率的设备上正常工作。使用Android Studio的预览...

Global site tag (gtag.js) - Google Analytics