Android的布局与滚动 [英] Android Layout with Scroll

查看:127
本文介绍了Android的布局与滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何创建Android的UI这样

01和02的布局的高度应在色器件的高度的1/3。默认情况下,布局应该显示黑色的区域,那些向下滚动它应该显示01和黑布局的2/3。


  1. 如果主视图中显示的 01,黑布局的2/3 和用户的向上滚动,然后就应该转到主要布局(黑色布局)


解决方案

我终于找到了解决办法。

 进口android.os.Bundle;
进口android.app.Activity;
进口android.util.DisplayMetrics;
进口android.util.Log;
进口android.view.GestureDetector;
进口android.view.GestureDetector.SimpleOnGestureListener;
进口android.view.MotionEvent;
进口android.widget.LinearLayout;
进口android.widget.ScrollView;
进口android.widget.Toast;公共类ScrollLayoutActivity延伸活动{私有静态字符串标记= ScrollLayoutActivity.class.getSimpleName();私人的LinearLayout mTopLayout;
私人的LinearLayout mMiddleLayout;
私人的LinearLayout mBottomLayout;私人滚动型mScrollView;私人布尔possitionTop;
私人布尔possitionMiddle = TRUE;INT mLayoutHeight;
浮mDeviceHeight;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_scroll_layouts);    DisplayMetrics displayMetrics =新DisplayMetrics();
    。getWindowManager()getDefaultDisplay()getMetrics(displayMetrics)。    //最后的浮动高度= displayMetrics.heightPixels / displayMetrics.xdpi;    以像素为单位//设备高度
    mDeviceHeight = displayMetrics.heightPixels;
    mLayoutHeight =(INT)mDeviceHeight / 3;    mScrollView =(滚动型)findViewById(R.id.scrv);    mTopLayout =(的LinearLayout)findViewById(R.id.top);
    mMiddleLayout =(的LinearLayout)findViewById(R.id.middle);
    mBottomLayout =(的LinearLayout)findViewById(R.id.bottom);    mTopLayout.setLayoutParams(新LinearLayout.LayoutParams(mTopLayout
            。.getLayoutParams()宽度,mLayoutHeight));
    mBottomLayout.setLayoutParams(新LinearLayout.LayoutParams(
            。mBottomLayout.getLayoutParams()宽度,mLayoutHeight));
    mMiddleLayout.setLayoutParams(新LinearLayout.LayoutParams(
            。mMiddleLayout.getLayoutParams()的宽度,(i​​nt)的mDeviceHeight));    mScrollView.setHorizo​​ntalFadingEdgeEnabled(假);
    mScrollView.setVerticalFadingEdgeEnabled(假);
    mScrollView.post(新的Runnable(){
        公共无效的run(){
            mScrollView.scrollTo(0,m​​LayoutHeight);
        }
    });    // findViewById(R.id.button).setOnClickListener(新
    // View.OnClickListener(){
    //
    // @覆盖
    //公共无效的onClick(视图v){
    // Toast.makeText(ScrollLayoutActivity.this,高度:+
    // mDeviceHeight,Toast.LENGTH_SHORT).show();
    //}
    //});    Toast.makeText(这一点,设备高度:+ mDeviceHeight,
            Toast.LENGTH_SHORT).show();}公共布尔dispatchTouchEvent(MotionEvent EV){
    返回mGestureDetector.onTouchEvent(EV);
}SimpleOnGestureListener simpleOnGestureListener =新SimpleOnGestureListener(){
    @覆盖
    公共布尔onFling(MotionEvent E1,E2 MotionEvent,浮velocityX,
            浮动velocityY){
        串滑动=;
        浮sensitvity = 100;        如果((e1.getX() - e2.getX())> sensitvity){
            刷卡+ =向左滑动\\ N的;
        }否则如果((e2.getX() - e1.getX())> sensitvity){
            刷卡+ =向右滑动,即可\\ n;
        }其他{
            刷卡+ =\\ n;
        }        如果((e1.getY() - e2.getY())> sensitvity){
            刷卡+ =向上滑动即可\\ n;
            如果(possitionMiddle&安培;!&安培; possitionTop){
                mScrollView.scrollBy(0,mLayoutHeight);
                possitionTop = FALSE;
                possitionMiddle =真;
            }否则如果(possitionMiddle&安培;&安培;!possitionTop){
                mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
                possitionTop = FALSE;
                possitionMiddle = FALSE;
            }
        }否则如果((e2.getY() - e1.getY())> sensitvity){
            刷卡+ =向下滑动\\ N的;
            如果(possitionMiddle&安培;&安培;!possitionTop){
                mScrollView.fullScroll(ScrollView.FOCUS_UP);
                possitionTop = TRUE;
                possitionMiddle = FALSE;
            }
            如果(possitionMiddle&安培;!&安培;!possitionTop){
                mScrollView
                        .scrollTo(mScrollView.getBottom(),mLayoutHeight);
                possitionTop = FALSE;
                possitionMiddle =真;
            }
        }其他{
            刷卡+ =\\ n;
        }
        Log.d(TAG,轻扫);
        返回super.onFling(E1,E2,velocityX,velocityY);
    }};GestureDetector mGestureDetector =新GestureDetector(
        simpleOnGestureListener);
}

下面是布局

 <?XML版本=1.0编码=UTF-8&GT?;
<滚动型的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:ID =@ + ID / SCRV
机器人:layout_width =match_parent
机器人:layout_height =FILL_PARENT
机器人:fillViewport =真
机器人:滚动条=无><的LinearLayout
    机器人:ID =@ + ID / container2的
    机器人:layout_width =match_parent
    机器人:layout_height =FILL_PARENT
    机器人:背景=#1E1E1E
    机器人:baselineAligned =假
    机器人:方向=垂直>    <的LinearLayout
        机器人:ID =@ + ID /顶
        机器人:layout_width =match_parent
        机器人:layout_height =100dp
        机器人:背景=@机器人:彩色/黑白
        机器人:baselineAligned =假
        机器人:方向=垂直>
    < / LinearLayout中>    <的LinearLayout
        机器人:ID =@ + ID /中
        机器人:layout_width =match_parent
        机器人:layout_height =100dp
        机器人:背景=@机器人:彩色/白
        机器人:baselineAligned =假
        机器人:方向=垂直>        <按钮
            机器人:ID =@ + ID /按钮
            风格=机器人:ATTR / buttonStyleSmall
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:文字=按钮/>
    < / LinearLayout中>    <的LinearLayout
        机器人:ID =@ + ID /底
        机器人:layout_width =match_parent
        机器人:layout_height =200dp
        机器人:背景=@机器人:彩色/ darker_gray
        机器人:baselineAligned =假
        机器人:方向=垂直>
    < / LinearLayout中>
< / LinearLayout中>

找到这里 Android的滚动型与GestureDetector

How to create Android UI like this

01 and 02 layouts height should be 1/3 of the devise's height. by default layout should show black area, ones scroll down it should show 01 and the 2/3 of the black layout.

  1. if the main view shows 01 and the 2/3 of the black layout and user scroll up then it should navigate to main layout(black layout)

解决方案

Finally I found the solution

import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.Toast;

public class ScrollLayoutActivity extends Activity {

private static String TAG = ScrollLayoutActivity.class.getSimpleName();

private LinearLayout mTopLayout;
private LinearLayout mMiddleLayout;
private LinearLayout mBottomLayout;

private ScrollView mScrollView;

private boolean possitionTop;
private boolean possitionMiddle = true;

int mLayoutHeight;
float mDeviceHeight;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scroll_layouts);

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

    // final float height=displayMetrics.heightPixels/displayMetrics.xdpi;

    // device height in pixels
    mDeviceHeight = displayMetrics.heightPixels;
    mLayoutHeight = (int) mDeviceHeight / 3;

    mScrollView = (ScrollView) findViewById(R.id.scrv);

    mTopLayout = (LinearLayout) findViewById(R.id.top);
    mMiddleLayout = (LinearLayout) findViewById(R.id.middle);
    mBottomLayout = (LinearLayout) findViewById(R.id.bottom);

    mTopLayout.setLayoutParams(new LinearLayout.LayoutParams(mTopLayout
            .getLayoutParams().width, mLayoutHeight));
    mBottomLayout.setLayoutParams(new LinearLayout.LayoutParams(
            mBottomLayout.getLayoutParams().width, mLayoutHeight));
    mMiddleLayout.setLayoutParams(new LinearLayout.LayoutParams(
            mMiddleLayout.getLayoutParams().width, (int) mDeviceHeight));

    mScrollView.setHorizontalFadingEdgeEnabled(false);
    mScrollView.setVerticalFadingEdgeEnabled(false);
    mScrollView.post(new Runnable() {
        public void run() {
            mScrollView.scrollTo(0, mLayoutHeight);
        }
    });

    // findViewById(R.id.button).setOnClickListener(new
    // View.OnClickListener() {
    //
    // @Override
    // public void onClick(View v) {
    // Toast.makeText(ScrollLayoutActivity.this, "height : " +
    // mDeviceHeight, Toast.LENGTH_SHORT).show();
    // }
    // });

    Toast.makeText(this, "Device Height : " + mDeviceHeight,
            Toast.LENGTH_SHORT).show();

}

public boolean dispatchTouchEvent(MotionEvent ev) {
    return mGestureDetector.onTouchEvent(ev);
}

SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        String swipe = "";
        float sensitvity = 100;

        if ((e1.getX() - e2.getX()) > sensitvity) {
            swipe += "Swipe Left\n";
        } else if ((e2.getX() - e1.getX()) > sensitvity) {
            swipe += "Swipe Right\n";
        } else {
            swipe += "\n";
        }

        if ((e1.getY() - e2.getY()) > sensitvity) {
            swipe += "Swipe Up\n";
            if (!possitionMiddle && possitionTop) {
                mScrollView.scrollBy(0, mLayoutHeight);
                possitionTop = false;
                possitionMiddle = true;
            } else if (possitionMiddle && !possitionTop) {
                mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
                possitionTop = false;
                possitionMiddle = false;
            }
        } else if ((e2.getY() - e1.getY()) > sensitvity) {
            swipe += "Swipe Down\n";
            if (possitionMiddle && !possitionTop) {
                mScrollView.fullScroll(ScrollView.FOCUS_UP);
                possitionTop = true;
                possitionMiddle = false;
            }
            if (!possitionMiddle && !possitionTop) {
                mScrollView
                        .scrollTo(mScrollView.getBottom(), mLayoutHeight);
                possitionTop = false;
                possitionMiddle = true;
            }
        } else {
            swipe += "\n";
        }
        Log.d(TAG, swipe);
        return super.onFling(e1, e2, velocityX, velocityY);
    }

};

GestureDetector mGestureDetector = new GestureDetector(
        simpleOnGestureListener);
}

Here is the layout

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrv"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:scrollbars="none" >

<LinearLayout
    android:id="@+id/container2"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:background="#1E1E1E"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/top"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@android:color/black"
        android:baselineAligned="false"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/middle"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@android:color/white"
        android:baselineAligned="false"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@android:color/darker_gray"
        android:baselineAligned="false"
        android:orientation="vertical" >
    </LinearLayout>
</LinearLayout>

find more details from here Android ScrollView with GestureDetector

这篇关于Android的布局与滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆