zoukankan      html  css  js  c++  java
  • ScrollView/HorizontalScrollView常用技巧

    ScrollView是ViewGroup的派生类,ViewGroup是View的派生类。

    +       屏幕大小总是有限制的,对移动设备来说更是如此。当有很多内容需要显示的时候,一屏显示不完时,就需要使用滚动的方式。

    +       ScrollView只能包含一个直接子view,这是因为ScrollView是FrameLayout的派生类,通常情况下,这个直接子view是一个LinearLayout,在直接子view(比如LinearLayout)中,可以再包含其他对象。

    +      ScrollView只支持垂直滚动。

    +      HorizontalScrollView除只支持水平滚动外,其他都和ScrollView一样。

    +      如果要屏幕支持垂直滚动和水平滚动,那么就要让HorizontalScrollView作为ScrollView的直接子view,或者让ScrollView作为HorizontalScrollView的直接子view。

    1. 创建一个AndroidProject,修改main.xml,使之如下:

    <?xml version="1.0" encoding="utf-8"?>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

        android:id="@+id/vsv"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        >

        <HorizontalScrollView

                    android:id="@+id/hsv"

                 android:layout_width="fill_parent"

                 android:layout_height="fill_parent"

        >

         <ImageView 

                            android:layout_width="1280px"

                            android:layout_height="800px"

                            android:src="@drawable/desktop"

                   />

        </HorizontalScrollView>

    </ScrollView>

    可以看到,在ScrollView里面嵌入了一个HorizontalScrollView,在HorizontalScrollView里面再嵌入了一个ImageView,ImageView用来显示一个1280x 800像素的大图片。

    1. 将desktop.png拷贝到res/drawable-mdpi文件夹下。
    2. 修改Activity所对应的Java代码,使之如下:

    packagecom.pat.gui;

    importandroid.app.Activity;

    importandroid.os.Bundle;

    importandroid.util.Log;

    importandroid.view.MotionEvent;

    importandroid.view.View;

    importandroid.view.Window;

    importandroid.view.WindowManager;

    importandroid.view.View.OnTouchListener;

    importandroid.widget.HorizontalScrollView;

    importandroid.widget.ScrollView;

    publicclass ControlScrollView extends Activity

    implements

    OnTouchListener

    {

        private ScrollView vsv;

        private HorizontalScrollView hsv;

       

        @Override

        public void onCreate(BundlesavedInstanceState)

        {

          super.onCreate(savedInstanceState);

         // 去掉标题栏

            requestWindowFeature(Window.FEATURE_NO_TITLE);

            // 全屏显示

           this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

            setContentView(R.layout.main);

          vsv = (ScrollView)findViewById(R.id.vsv);

            hsv =(HorizontalScrollView)findViewById(R.id.hsv);

           vsv.setOnTouchListener(this);

            hsv.setOnTouchListener(this);

        }

             //@Override

             public boolean onTouch(View v,MotionEvent event)

             {

                       if(event.getAction() ==MotionEvent.ACTION_MOVE)

                       {

                                int x =(int)event.getX();

                                int y =(int)event.getY();

                               

                                Log.e("Coordinates= ", "(" + x + ", " + y + ")");

                       }

                       return false;

             }

    }

    运行结果如下:

    可以在水平方向或者垂直方向滚动。对应的Logcat输出如下:

     

    所输出的坐标就是鼠标(真机上的手指)开始接触屏幕时的坐标。

    1. 说明:

    a)     水平方向和垂直方向不能同时滚动。也就是说要么水平滚动,要么垂直滚动,而不能两个方向同时滚动。

    b)     ImageView可以由其他View对象代替,比如LinearLayout,而在LinearLayout里面,可以放置其他的component,比如EditText、Button等等。

  • 相关阅读:
    jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
    doT中嵌套for循环的使用
    c++ new带括号和不带括号
    python装饰器之使用情景分析
    Python中classmethod与staticmethod区别
    python作用域 scope
    duck type鸭子类型
    EAFP和LBYL 两种防御性编程风格
    c++重载、覆盖和隐藏
    c++ 名字粉碎(name mangling)
  • 原文地址:https://www.cnblogs.com/qingblog/p/2511684.html
Copyright © 2011-2022 走看看