当标签很多而不能在一个页面显示时,希望可以通过滑动来显示未显示的标签。这个效果的实现方式有很多,比如:Gallery, TextSwitcher, 自定义View等。本文简单说明通过组合来实现这个效果,先看图片:
实现原理:在HorizontalScrollView中添加View,实现水平滚动。当点击操作时,对View的状态做修改。记录本次点击和上次点击的View,然后切换不同显示状态。
布局代码:
<?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="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <HorizontalScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:scrollbars="none"> <LinearLayout android:id="@+id/container" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > </LinearLayout> </HorizontalScrollView> <TextView android:id="@+id/displayText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="30dip" android:textStyle="bold" /> </LinearLayout>
主要代码:
import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.LinearLayout.LayoutParams; public class MyScrollViewTestActivity extends Activity implements OnClickListener { private TextView displayText; /** * 装载标题的容器 */ private LinearLayout containerLayout; /** * 用于显示的标题 */ private static String[] titles = { "发表文章", "分类管理", "评论管理", "做电子书", "博客设置", "回收站", "我的文档", "红色警戒", "魔兽世界", "DOTA" }; /** * 点击子项后显示的信息 */ private String message; private Button lastButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); displayText = (TextView) findViewById(R.id.displayText); containerLayout = (LinearLayout) findViewById(R.id.container); // 添加标题相关的控件 initViews(); } /** * 初始化视图 */ private void initViews() { Button item; LayoutParams itemParams; for (int i = 0, length = titles.length; i < length; i++) { // 设置按钮属性 item = new Button(this); item.setBackgroundResource(R.drawable.item); item.setShadowLayer(0.5f, 1, 1, Color.GRAY); item.setText(titles[i]); item.setTag(String.valueOf(i)); item.setOnClickListener(this); // 设置布局参数 itemParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); itemParams.gravity = Gravity.CENTER; containerLayout.addView(item, itemParams); } onClick(containerLayout.getChildAt(0)); } @Override public void onClick(View v) { if (lastButton != null) { lastButton.setBackgroundResource(R.drawable.item); } v.setBackgroundResource(R.drawable.item_selected); lastButton = (Button) v; try { // 获得相关信息 message = titles[Integer.valueOf((String) v.getTag())]; } catch (Exception e) { e.printStackTrace(); return; } // 针对不同信息,需要做的操作 Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); displayText.setText(message); } }
说明:
- lastButton:记录上次操作的View,用于操作该View的状态;
- item.xml:用于设置按钮操作的效果,如按下后的状态改变等;
- displayText:当点击某个标签时,用户显示特定信息;
item.xml代码:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/item_normal" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/> <item android:drawable="@drawable/item_selected" android:state_selected="true"/> <item android:drawable="@drawable/item_selected" android:state_pressed="true"/> <item android:drawable="@drawable/item_selected" android:state_focused="true"/> </selector>
图片在附件中可以找到!:)
多说一句:可以把HorizontalScrollView部分单独做成一个View,不同事件给出一定的回调接口,方便代码的重用。本例中的子项是一个Button,也可以是一些View组合而成的控件。当标签的文字比较多时,需要合理使用draw9patch工具来控制显示效果。:)
相关推荐
很明显横向滑动的分页,第一反应就是使用ViewPager,毕竟只要通过自定义ViewPager,实现这个效果还是很容易,但是实际中问题时,当前模块是Recyclerview中某一个Holder,为了性能,肯定尽量使用Recyclerview去复用...
仿真书籍翻页效果BookPageView简介:实现了仿真翻页效果,教程完整地描述了翻页原理分析到性能优化的过程教程博客:Android自定义View——从零开始实现书籍翻页效果(一) Android自定义View——从零开始实现书籍...
自定义View实现随滑动由箭头变对勾的指示按钮
Android自定义View实现转盘旋转的效果
Android Scroller实现View弹性滑动Demo
Android自定义View实现水印效果,在界面上显示自定义的水印文字(保存以备以后使用)
使用AndroidStudio 编写,注释详细,可供学习者参考。 自定义View实现水平方向的温度计,设定一个高温,超过这个高温则显示红色,正常时为绿色。文字跟随温度计颜色变化。
Android自定义View实现水波纹效果,对Path的学习,实现一个水波纹效果
QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容。QGraphicsScene提供了QGraphicsItem的容器功能。...以下是一个QGraphicsView的例子,实现滑动的窗体效果,工具栏和图片均为场景中的Item。
Android自定义View实现QQ气泡效果,手势拖动气泡,两条贝塞尔曲线,回弹动画,爆炸气泡效果实现。。。。
SwipeCardView是基于Diolor的Swipecards控件改进实现,SwipeCardView是一个优雅的刷脸控件,滑动刷脸伴随渐变层叠动画,带来前所未有的滑动刷脸体验。 thanks Diolor Swipecards Screenshot Relative Project ...
一个自定义的viewgroupp实现的左右无限滑动效果。用三个imageview 实现的, 可以轻松的把imgeview改成任意布局的view.
主要为大家详细介绍了Android自定义view实现选座功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android自定义View实现开关按钮效果,适用于Android进阶初级开发者参考探讨。博文地址:http://blog.csdn.net/jaynm/article/details/52601935
这是一个使用自定义View实现显示图片,并实现了手势缩放、拖拽、切换。在缩放状态下单手指拖拽图片,在未缩放状态下可以实现图片切换或其他功能,已经留好对应接口。只要修改相关代码就可以了
主要为大家详细介绍了Android自定义View实现水平带数字百分比进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文利用SrcIn实现一个人脸扫描的效果,步骤如下: 1、准备两个人脸照片(一明一暗),暗照片作为背景,亮照片作为src前景显示 2、然后通过SrcIn用一个透明矩形框(Dst)与亮照片(src)取交集即可得出一个亮照片的...
NULL 博文链接:https://gekie.iteye.com/blog/1104426
Android自定义View实现开关按钮效果,适用于Android进阶初级开发者参考探讨。
在 Android端app上,自定义View,仿一个斗鱼web端滑动验证码