当标签很多而不能在一个页面显示时,希望可以通过滑动来显示未显示的标签。这个效果的实现方式有很多,比如: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工具来控制显示效果。:)
相关推荐
开发者可以利用`View`的`scrollBy()`或`smoothScrollBy()`方法实现平滑滚动,或者使用`Scroller`类配合`computeScroll()`方法实现更复杂的动画滑动效果。 接下来是倒影效果。倒影通常用于图片,它为图片添加一个...
"Pager"通常指的是Android的ViewPager组件,它是实现页面滑动效果的核心工具。本篇文章将深入探讨如何在Android应用中实现这种“华丽翻页效果”。 首先,我们需要了解`ViewPager`。`ViewPager`是Android SDK中的一...
为了实现滑动效果,我们需要监听HorizontalScrollView的滑动事件。这可以通过重写`onTouchEvent()`方法或者设置一个OnScrollChangeListener来实现。在滑动事件中,我们可以获取滑动的距离,根据距离来改变菜单项的...
首先,`ViewPager`是Android支持库中的一个视图组件,它允许用户通过水平滑动来浏览多个页面。`ViewPager`会自动处理页面的加载、缓存和销毁,从而优化内存使用。为了使用`ViewPager`,我们需要在布局文件中添加`...
为了实现股票数据的联动效果,例如当用户在主股票列表中滑动时,对应的详细信息栏也同步更新,我们需要监听ListView的滚动事件,并根据滚动位置动态更新详细信息栏的数据。这可以通过实现OnItemSelectedListener或...
在Android开发中,UI设计是至关重要的一环,而水平滑动的ListView,即Horizontal ListView,是一种常见的组件,用于展示横向滚动的数据列表。本篇将深入探讨这个话题,并结合`RecyclerView`,一个更现代且功能强大的...
`ViewPager`常用于实现平滑的左右滑动效果,通常与`PagerAdapter`一起使用,`PagerAdapter`负责管理页面的创建和销毁,以节省内存。`ViewPager`非常适合在有限的空间内展示大量内容,如在一个Tab系统中。 3. **`...
`ViewPager`是Android提供的一个可以水平滑动查看多个页面的控件,它内部实现了页面的缓存机制,可以高效地管理页面的生命周期。为了实现轮播效果,我们需要扩展`ViewPager`的适配器,如`PagerAdapter`或`...
3. **触摸事件处理**: 实现滑动效果的关键在于正确处理触摸事件。在自定义View中,需要重写`onTouchEvent()`方法,解析ACTION_DOWN、ACTION_MOVE和ACTION_UP等事件,通过计算手指移动的距离和速度来判断是否触发滑动...
"android控件滑动和倒影"的主题聚焦于如何在Android应用中实现图片按钮的滑动效果以及倒影(反射)效果。下面将详细解释这两个关键知识点。 首先,让我们探讨图片按钮的滑动效果。在Android中,滑动通常涉及到触摸...
本压缩包文件"安卓Android源码——系统主界面下方的小按钮滑动效果--SlideD.zip"包含了一个实现Android系统主界面底部小按钮滑动效果的源码示例。这种滑动效果通常出现在手机的主屏幕底部,例如导航栏的三大金刚键...
1. **动画效果**:自定义View中常使用`ObjectAnimator`、`ValueAnimator`或者`PropertyAnimator`实现平移、旋转、缩放等动画。 2. **手势识别**:通过`GestureDetector`和`ScaleGestureDetector`可以识别滑动、点击...
为了实现界面的滑动效果,我们需要重写`onTouchEvent()`方法,通过监听滑动手势来改变子视图的位置。 在`UIScrollLayout`中,关键在于如何处理滑动事件。这通常涉及到对`MotionEvent`的分析,如ACTION_DOWN、ACTION...
它允许用户通过水平滑动手势在多个页面之间切换,非常适合用于创建滑动浏览的界面。在我们的案例中,ViewPager将用来承载各个分类的GridView。 接下来是GridView,它是一个二维的列表视图,可以展示一列或多列项目...
总的来说,通过组合使用HorizontalScrollView和GridView,我们可以实现Android单行水平滑动的效果。同时,通过保存和恢复选中状态,可以提供良好的用户体验。在实际项目中,还可以根据需求进一步优化,如添加动画...
`ViewPager`、`Fragment`和`DrawableLayout`的结合使用,以及`NavigationView`的加入,可以帮助开发者构建出功能丰富的水平滑动页面和侧滑抽屉布局。下面将详细讲解这些组件的工作原理和它们如何协同工作。 首先,`...
2. 为了实现平滑的滑动效果,可以使用Android的Scroller类。在滑动事件中,通过计算偏移量并调用scrollBy()或scrollTo()方法来改变视图位置。 3. 可以添加边缘反弹效果,当用户尝试滑动到内容的边界时,提供一种视觉...
在Android开发中,View动画是实现用户界面动态效果的重要手段,它可以为应用增添生动性和交互性。本资源“Android的View动画.rar”包含了对四种基本动画的实现:隐藏、旋转、缩放和平移,这些都是Android View ...
1. **使用ViewPager**:`ViewPager`是Android SDK中的一个视图容器,它允许用户在多个页面之间进行平滑的水平滑动。每个页面通常对应一个`Fragment`实例,`ViewPager`会根据需要加载和销毁页面,以节省内存。通过...
通过组合这两个组件,我们可以实现类似微博个人主页的多方向滑动效果。 1. **自定义View的基本结构**: - 创建一个新的Java类,继承自`View`或`ViewGroup`,具体取决于你需要实现的功能复杂性。如果是简单的视图,...