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

Android 组合View实现水平滑动效果

阅读更多

当标签很多而不能在一个页面显示时,希望可以通过滑动来显示未显示的标签。这个效果的实现方式有很多,比如: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工具来控制显示效果。:)

 

 

 

  • 大小: 21.7 KB
  • 大小: 22.3 KB
  • 大小: 21.5 KB
  • 大小: 2.8 KB
  • 大小: 4.1 KB
分享到:
评论

相关推荐

    Android 滑动效果 倒影效果

    开发者可以利用`View`的`scrollBy()`或`smoothScrollBy()`方法实现平滑滚动,或者使用`Scroller`类配合`computeScroll()`方法实现更复杂的动画滑动效果。 接下来是倒影效果。倒影通常用于图片,它为图片添加一个...

    Android 滑动效果 华丽翻页效果

    "Pager"通常指的是Android的ViewPager组件,它是实现页面滑动效果的核心工具。本篇文章将深入探讨如何在Android应用中实现这种“华丽翻页效果”。 首先,我们需要了解`ViewPager`。`ViewPager`是Android SDK中的一...

    android导航菜单横向左右滑动

    为了实现滑动效果,我们需要监听HorizontalScrollView的滑动事件。这可以通过重写`onTouchEvent()`方法或者设置一个OnScrollChangeListener来实现。在滑动事件中,我们可以获取滑动的距离,根据距离来改变菜单项的...

    Android ViewPager和Fragment 实现滑动切换页面

    首先,`ViewPager`是Android支持库中的一个视图组件,它允许用户通过水平滑动来浏览多个页面。`ViewPager`会自动处理页面的加载、缓存和销毁,从而优化内存使用。为了使用`ViewPager`,我们需要在布局文件中添加`...

    Android使用自定义ListView+ScrollView实现股票界面上下左右滑动

    为了实现股票数据的联动效果,例如当用户在主股票列表中滑动时,对应的详细信息栏也同步更新,我们需要监听ListView的滚动事件,并根据滚动位置动态更新详细信息栏的数据。这可以通过实现OnItemSelectedListener或...

    Android UI水平滑动的ListView(Horizontal ListView)

    在Android开发中,UI设计是至关重要的一环,而水平滑动的ListView,即Horizontal ListView,是一种常见的组件,用于展示横向滚动的数据列表。本篇将深入探讨这个话题,并结合`RecyclerView`,一个更现代且功能强大的...

    android ActionBarTabs+ViewPager+Fragment 实现tab 滑动翻页效果

    `ViewPager`常用于实现平滑的左右滑动效果,通常与`PagerAdapter`一起使用,`PagerAdapter`负责管理页面的创建和销毁,以节省内存。`ViewPager`非常适合在有限的空间内展示大量内容,如在一个Tab系统中。 3. **`...

    Android实现Banner轮播效果源码程序

    `ViewPager`是Android提供的一个可以水平滑动查看多个页面的控件,它内部实现了页面的缓存机制,可以高效地管理页面的生命周期。为了实现轮播效果,我们需要扩展`ViewPager`的适配器,如`PagerAdapter`或`...

    Android仿豆瓣FM卡片滑动

    3. **触摸事件处理**: 实现滑动效果的关键在于正确处理触摸事件。在自定义View中,需要重写`onTouchEvent()`方法,解析ACTION_DOWN、ACTION_MOVE和ACTION_UP等事件,通过计算手指移动的距离和速度来判断是否触发滑动...

    android控件滑动和倒影

    "android控件滑动和倒影"的主题聚焦于如何在Android应用中实现图片按钮的滑动效果以及倒影(反射)效果。下面将详细解释这两个关键知识点。 首先,让我们探讨图片按钮的滑动效果。在Android中,滑动通常涉及到触摸...

    安卓Android源码——系统主界面下方的小按钮滑动效果--SlideD.zip

    本压缩包文件"安卓Android源码——系统主界面下方的小按钮滑动效果--SlideD.zip"包含了一个实现Android系统主界面底部小按钮滑动效果的源码示例。这种滑动效果通常出现在手机的主屏幕底部,例如导航栏的三大金刚键...

    Android 自定义view 大合集源码

    1. **动画效果**:自定义View中常使用`ObjectAnimator`、`ValueAnimator`或者`PropertyAnimator`实现平移、旋转、缩放等动画。 2. **手势识别**:通过`GestureDetector`和`ScaleGestureDetector`可以识别滑动、点击...

    Android自定义组合控件:UIScrollLayout(支持界面滑动及左右菜单滑动)

    为了实现界面的滑动效果,我们需要重写`onTouchEvent()`方法,通过监听滑动手势来改变子视图的位置。 在`UIScrollLayout`中,关键在于如何处理滑动事件。这通常涉及到对`MotionEvent`的分析,如ACTION_DOWN、ACTION...

    Android 仿美团网,探索利用ViewPager+GridView实现左右滑动查看更多分类的功能

    它允许用户通过水平滑动手势在多个页面之间切换,非常适合用于创建滑动浏览的界面。在我们的案例中,ViewPager将用来承载各个分类的GridView。 接下来是GridView,它是一个二维的列表视图,可以展示一列或多列项目...

    Android GridView实现一行显示并左右滚动

    总的来说,通过组合使用HorizontalScrollView和GridView,我们可以实现Android单行水平滑动的效果。同时,通过保存和恢复选中状态,可以提供良好的用户体验。在实际项目中,还可以根据需求进一步优化,如添加动画...

    ViewPager+Fragment+DrawableLayout 实现页面水平滑动与侧滑抽屉布局

    `ViewPager`、`Fragment`和`DrawableLayout`的结合使用,以及`NavigationView`的加入,可以帮助开发者构建出功能丰富的水平滑动页面和侧滑抽屉布局。下面将详细讲解这些组件的工作原理和它们如何协同工作。 首先,`...

    Android 具有左右滑动功能的时间轴控件

    2. 为了实现平滑的滑动效果,可以使用Android的Scroller类。在滑动事件中,通过计算偏移量并调用scrollBy()或scrollTo()方法来改变视图位置。 3. 可以添加边缘反弹效果,当用户尝试滑动到内容的边界时,提供一种视觉...

    Android的View动画.rar

    在Android开发中,View动画是实现用户界面动态效果的重要手段,它可以为应用增添生动性和交互性。本资源“Android的View动画.rar”包含了对四种基本动画的实现:隐藏、旋转、缩放和平移,这些都是Android View ...

    android又测滑动导航、抽屉效果,更换背景图片

    1. **使用ViewPager**:`ViewPager`是Android SDK中的一个视图容器,它允许用户在多个页面之间进行平滑的水平滑动。每个页面通常对应一个`Fragment`实例,`ViewPager`会根据需要加载和销毁页面,以节省内存。通过...

    仿新浪个人信息的滑动自定义view

    通过组合这两个组件,我们可以实现类似微博个人主页的多方向滑动效果。 1. **自定义View的基本结构**: - 创建一个新的Java类,继承自`View`或`ViewGroup`,具体取决于你需要实现的功能复杂性。如果是简单的视图,...

Global site tag (gtag.js) - Google Analytics