首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2013-02-15 
Android 组合View实现水平滑动效果当标签很多而不能在一个页面显示时,希望可以通过滑动来显示未显示的标签

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

当标签很多而不能在一个页面显示时,希望可以通过滑动来显示未显示的标签。这个效果的实现方式有很多,比如:Gallery, TextSwitcher, 自定义View等。本文简单说明通过组合来实现这个效果,先看图片:


Android 结合View实现水平滑动效果
?
Android 结合View实现水平滑动效果
?
Android 结合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));}@Overridepublic 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工具来控制显示效果。:)

?

?

?

热点排行