Android-ScrollView滚动试图Demo

代码

package com.lxt008;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class Activity01 extends Activity
{
    private LinearLayout mLayout;
    private ScrollView     mScrollView;
    private final Handler mHandler = new Handler();  

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //创建一个线性布局
        mLayout = (LinearLayout) findViewById(R.id.layout);
        //创建一个ScrollView对象
        mScrollView = (ScrollView) findViewById(R.id.ScrollView01);   

        Button button = (Button) findViewById(R.id.Button01); 

        button.setOnClickListener(mClickListener);
        //改变默认焦点切换
        button.setOnKeyListener(mAddButtonKeyListener);
    }

    //Button事件监听
    //当点击按钮时,增加一个TextView和Button
    private Button.OnClickListener mClickListener = new Button.OnClickListener()
    {
        private int mIndex = 1;
        @Override
        public void onClick(View arg0)
        {
            // TODO Auto-generated method stub
            TextView textView = new TextView(Activity01.this);
            textView.setText("Text View " + mIndex);
            LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.FILL_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT
            );
            //增加一个TextView到线性布局中
            mLayout.addView(textView, p);   

            Button buttonView = new Button(Activity01.this);
            buttonView.setText("Button " + mIndex++);

          //增加一个Button到线性布局中
            mLayout.addView(buttonView, p);
            //改变默认焦点切换
            buttonView.setOnKeyListener(mNewButtonKeyListener);
            //投递一个消息进行滚动
            mHandler.post(mScrollToBottom);
        }
    };   

    private Runnable mScrollToBottom = new Runnable()
    {
        @Override
        public void run()
        {
            // TODO Auto-generated method stub   

            int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();
            if (off > 0)
            {
                mScrollView.scrollTo(0, off);
            }
        }
    };   

    //事件监听
    private View.OnKeyListener mNewButtonKeyListener = new View.OnKeyListener()
    {
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN &&
                    event.getAction() == KeyEvent.ACTION_DOWN &&
                    v == mLayout.getChildAt(mLayout.getChildCount() - 1))
            {
                findViewById(R.id.Button01).requestFocus();
                return true;
            }
            return false;
        }
    };   

  //事件监听
    private View.OnKeyListener mAddButtonKeyListener = new Button.OnKeyListener()
    {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            // TODO Auto-generated method stub
            View viewToFoucus = null;
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                int iCount = mLayout.getChildCount();
                switch (keyCode)
                {
                case KeyEvent.KEYCODE_DPAD_UP:
                    if ( iCount > 0)
                    {
                        viewToFoucus = mLayout.getChildAt(iCount - 1);
                    }
                    break;
                case KeyEvent.KEYCODE_DPAD_DOWN:
                    if (iCount < mLayout.getWeightSum())
                    {
                        viewToFoucus = mLayout.getChildAt(iCount + 1);
                    }
                    break;
                default:
                    break;
                }
            }
            if (viewToFoucus != null)
            {
                viewToFoucus.requestFocus();
                return true;
            }
            else
            {
                return false;
            }
        }
    };
}

布局文件

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ScrollView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none">
    <LinearLayout
        android:id="@+id/layout"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="TextView0"/>

        <Button
           android:id="@+id/Button01"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Button0"/>
    </LinearLayout>
</ScrollView>
时间: 2024-10-09 15:30:20

Android-ScrollView滚动试图Demo的相关文章

Android ScrollView 滚动机制

Android ScrollView 滚动机制 我们都知道通过View#scrollTo(x,y)既可以实现将View滚动的效果,如果再添加Scroller类,就可以实现滚到效果.但是,这背后是如何实现的呢?这个问题涉及到View的绘图机制.我们先看看View的绘图的基本流程 (图片来自于网上比较常见的view绘图流程图) 关于三个阶段的简单描述: 1. measure:预估计ViewTree的各个View的占用空间. 2. layout :   确定ViewTree中各个View所处的空间位置

从零开始学android&lt;ScrollView滚动视图.十八.&gt;

由于手机屏幕的高度有限,所以如果面对组件要显示多组信息的时候,ScrollView视图(滚动视图)可以有效的安排这些组件,浏览时可以自动的进行滚屏的操作. android.widget.ScrollView类继承结构如下所示: java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.ScrollView ScrollView的特点: Sc

Android ScrollView 滚动到顶部

有时候使用ScrollView,里边控件比较多的时候,打开界面,会滑到底部,如果要设置滑动到顶部,一般有两种方法 1.使用fullScrol(),scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 需要注意的是,该方法不能直接被调用 因为Android很多函数都是基于消息队列来同步,所以需要一部操作, addView完之后,不等于马上就会显示,而是在

Android ScrollView滚动实现大众点评、网易云音乐评论悬停效果

今天听着网易云音乐,写着代码,真是爽翻了. http://blog.csdn.net/linshijun33/article/details/47910833 网易云音乐这个产品亮点应该在评论这一模块,于是我就去看了下评论区,发现一个它是用的一个ScrollView,从上到下可分为三部分.最上面是音乐封面.接着是精彩评论,然后是最新评论.手指在上面滚动一段距离.精彩评论就在布局顶部悬停,再接着滚动,最新评论就替代精彩评论在布局顶部悬停,十分有趣的一个特点. 然后又去翻了一下大众点评APP,发现也

Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

我之前写了一篇关于美团网,大众点评的购买框效果的文章Android对ScrollView滚动监听,实现美团.大众点评的购买悬浮效果,我自己感觉效果并不是很好,如果快速滑动界面,显示悬浮框的时候会出现一卡的现象,有些朋友说有时候会出现两个布局的情况,特别是对ScrollView滚动的Y值得监听,我还使用了Handler来获取,还有朋友给我介绍了Scrolling Tricks这个东西,我下载试了下,确实美团网,大众点评的购买框用的是这种效果,但是Scrolling Tricks只能在API11以上

Android ScrollView嵌套ScrollView滚动的问题解决办法

引用:http://mengsina.iteye.com/blog/1707464 http://fenglog.com/article.asp?id=449 Android ScrollView嵌套ScrollView滚动的问题解决办法 原文地址:http://trivedihardik.wordpress.com/2011/09/19/scrollview-inside-scrollview-scrolling-problem/ 搞技术的多少看的懂E文,也不翻译了. While design

Android View滚动、拉伸到顶/底部弹性回弹复位

 <Android View滚动.拉伸到顶/底部弹性回弹复位> 我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后,像橡皮筋一样弹性回弹复位(<Android ListView拉到顶/底部,像橡皮筋一样弹性回弹复位>,文章链接地址: http://blog.csdn.net/zhangphil/article/details/47311155 ).事实上,Android凡是由ScrollView包裹的控件,均可实现滚动到顶/底部,弹性回弹复位的交互设

步步为营_Android开发课[25]_用户界面之ScrollView(滚动视图)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之ScrollView(滚动视图) - ScrollView滚动视图实例: activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayo

Android scrollview 上滑固定某一控件(美团团购详情UI)完美版

在scrollview 上滑固定某一控件(美团团购详情UI)文中介绍了怎么用touchlistener实现类似上滑停住的效果,但是这种方法存在一个明显的bug,就是在内容比较多的时候, 大部分人都是以滑动方式查看内容,而不是touch的方式,这就会导致最上面的滑块出现不及时,或者延后的现象,这里介绍一个全新的方法去实现类似效果,可以很好的解决以上问题. 目前在scrollview中没有onscrolllistener所以需要自己去实现,先复写一个scrollview: package com.e