Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使不需要ScrollView,如何使活动可滚动?_Java_Android_Android Activity_Scrollview - Fatal编程技术网

Java 即使不需要ScrollView,如何使活动可滚动?

Java 即使不需要ScrollView,如何使活动可滚动?,java,android,android-activity,scrollview,Java,Android,Android Activity,Scrollview,我有一个活动,其中包括一些相对值垂直排列在线性布局中。现在,我希望用户能够通过上下滚动来玩活动,我的意思是,假设我的活动中有4个线性布局中的RelativeLayouts,它们只占据屏幕的一半垂直位置,因此不需要滚动视图,但我想要上下滚动(如果用户上下滚动)然后回到第一个位置(像弹簧一样!)。这不是什么新鲜事,我相信你们都知道我说的话!如何做到这一点?在scrollview中添加一个ontouchlistener,该listener将封装外部线性布局,并将侦听器句柄置于scroll上。为了满足您

我有一个
活动
,其中包括一些
相对值
垂直排列在
线性布局中
。现在,我希望用户能够通过上下滚动来玩活动,我的意思是,假设我的活动中有4个
线性布局中的
RelativeLayout
s,它们只占据屏幕的一半垂直位置,因此不需要
滚动视图
,但我想要上下滚动(如果用户上下滚动)然后回到第一个位置(像弹簧一样!)。这不是什么新鲜事,我相信你们都知道我说的话!如何做到这一点?

在scrollview中添加一个ontouchlistener,该listener将封装外部线性布局,并将侦听器句柄置于scroll上。为了满足您的需要,您将不得不对其进行大量修改,但它将提供如何工作的基本信息。或者您可以使用listview中已有的淡入淡出边缘属性,从而节省大量时间,避免复制Apple UI

触摸式监听示例

using System;
using System.Collections.Generic;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Views.Animations;


namespace SomeProgram
{

public class ViewFlipperSwipeDetector : ParentActivity, View.IOnTouchListener
{


    //private Activity activity;
    private ViewFlipper viewflipper;
    int MIN_DISTANCE = 100;
    private float downX, downY, upX, upY;


    public ViewFlipperSwipeDetector(ViewFlipper viewflipper)
    {
        //this.activity = activity;
        this.viewflipper = viewflipper;

    }

   private Animation inFromRightAnimation() 
   {
    Animation inFromRight = new TranslateAnimation(
    Dimension.RelativeToParent, +1.0f, Dimension.RelativeToParent, 0.0f,
    Dimension.RelativeToParent, 0.0f, Dimension.RelativeToParent, 0.0f);

    inFromRight.Duration = 400;
    inFromRight.Interpolator = new AccelerateInterpolator();
    return inFromRight;
    }

    private Animation outToLeftAnimation() 
    {
     Animation outtoLeft = new TranslateAnimation(
     Dimension.RelativeToParent, 0.0f, Dimension.RelativeToParent, -1.0f,
     Dimension.RelativeToParent, 0.0f, Dimension.RelativeToParent, 0.0f);

    outtoLeft.Duration = 400;
    outtoLeft.Interpolator = new AccelerateInterpolator();
    return outtoLeft;
    }

    private Animation inFromLeftAnimation() 
    {
    Animation inFromLeft = new TranslateAnimation(
    Dimension.RelativeToParent, -1.0f, Dimension.RelativeToParent, 0.0f,
    Dimension.RelativeToParent, 0.0f, Dimension.RelativeToParent, 0.0f);
    inFromLeft.Duration = 400;
    inFromLeft.Interpolator = new AccelerateInterpolator();
    return inFromLeft;
    }

    private Animation outToRightAnimation() 
    {
    Animation outtoRight = new TranslateAnimation(
    Dimension.RelativeToParent, 0.0f, Dimension.RelativeToParent, +1.0f,
     Dimension.RelativeToParent, 0.0f, Dimension.RelativeToParent, 0.0f);
    outtoRight.Duration = 400;
    outtoRight.Interpolator = new AccelerateInterpolator();
    return outtoRight;
    }

    protected void onRightToLeftSwipe()
    {
        //Toast.MakeText(activity, "RightToLeftSwipe!", ToastLength.Short).Show();
        viewflipper.InAnimation = inFromRightAnimation();
        viewflipper.OutAnimation = outToLeftAnimation();
        viewflipper.ShowNext();

    }

    protected void onLeftToRightSwipe()
    {

       // Toast.MakeText(activity, "LeftToRightSwipe!", ToastLength.Short).Show();
        viewflipper.InAnimation = inFromLeftAnimation();
        viewflipper.OutAnimation = outToRightAnimation();
        viewflipper.ShowPrevious();

    }

    protected void onTopToBottomSwipe()
    {
        //Toast.MakeText(activity, "TopToBottomSwipe!", ToastLength.Short).Show();
        //activity.doSomething();
    }

    protected void onBottomToTopSwipe()
    {
        //Toast.MakeText(activity, "BottomToTopSwipe!", ToastLength.Short).Show();
        //activity.doSomething();
    }


    public bool OnTouch(View v, MotionEvent e)
    {
        switch (e.Action)
        {
            case MotionEventActions.Down:
                {
                    downX = e.GetX();
                    downY = e.GetY();
                    return true;
                }
            case MotionEventActions.Up:
                {
                    upX = e.GetX();
                    upY = e.GetY();

                    float deltaX = downX - upX;
                    float deltaY = downY - upY;

                    // swipe horizontal?
                    if (Math.Abs(deltaX) > MIN_DISTANCE)
                    {
                        // left or right
                        if (deltaX < 0) { this.onLeftToRightSwipe(); return true; }
                        if (deltaX > 0) { this.onRightToLeftSwipe(); return true; }
                    }
                    else
                    {
                        //Toast.MakeText(activity, "Swipe was only " + Math.Abs(deltaX) + " long, need at least " + MIN_DISTANCE, ToastLength.Short).Show();
                        return false; 
                    }

                    // swipe vertical?
                    if (Math.Abs(deltaY) > MIN_DISTANCE)
                    {
                        // top or down
                        if (deltaY < 0) { this.onTopToBottomSwipe(); return true; }
                        if (deltaY > 0) { this.onBottomToTopSwipe(); return true; }
                    }
                    else
                    {
                        //Toast.MakeText(activity, "Swipe was only " + Math.Abs(deltaX) + " long, need at least " + MIN_DISTANCE, ToastLength.Short);
                        return false; 
                    }

                    return true;
                }
        }
        return false;
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
    }

}
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用Android.App;
使用Android.Content;
使用Android.OS;
使用Android.Runtime;
使用Android.Views;
使用Android.Widget;
使用Android.Views.Animations;
名称空间程序
{
公共类ViewFlipperSwipeDetector:ParentActivity,View.IOnTouchListener
{
//私人活动;
私有ViewFlipper ViewFlipper;
int最小距离=100;
私人浮动downX,downY,upX,upY;
公共ViewFlipperWipeDetector(ViewFlipper ViewFlipper)
{
//这个。活动=活动;
this.viewflipper=viewflipper;
}
私有动画INFORMORightAnimation()
{
动画信息右侧=新的TranslateAnimation(
维度.RelativeToParent,+1.0f,维度.RelativeToParent,0.0f,
维度.RelativeToParent,0.0f,维度.RelativeToParent,0.0f);
持续时间=400;
inframomright.Interpolator=新的加速器Interpolator();
返回版权;
}
私有动画outToLeftAnimation()
{
动画outtoLeft=新的TranslateAnimation(
Dimension.RelativeToParent,0.0f,Dimension.RelativeToParent,-1.0f,
维度.RelativeToParent,0.0f,维度.RelativeToParent,0.0f);
outtoLeft.持续时间=400;
outtoLeft.Interpolator=新的加速器Interpolator();
返回outtoLeft;
}
私有动画INFOROMLEFTANIMATION()
{
动画信息左=新的TranslateAnimation(
Dimension.RelativeToParent,-1.0f,Dimension.RelativeToParent,0.0f,
维度.RelativeToParent,0.0f,维度.RelativeToParent,0.0f);
持续时间=400;
inframomlight.Interpolator=新的AccelerateInterpolator();
返回左前;
}
私有动画outToRightAnimation()
{
动画输出光=新的TranslateAnimation(
Dimension.RelativeToParent,0.0f,Dimension.RelativeToParent,+1.0f,
维度.RelativeToParent,0.0f,维度.RelativeToParent,0.0f);
户外照明。持续时间=400;
插值器=新的加速器插值器();
返回右侧;
}
RightToLeftsWipe()上受保护的无效
{
//Toast.MakeText(活动“rightoleftsweep!”,ToastLength.Short.Show();
viewflipper.inaimation=INFORMORightAnimation();
viewflipper.OutAnimation=outToLeftAnimation();
viewflipper.ShowNext();
}
受保护的void onLeftToRightSwipe()
{
//Toast.MakeText(活动“LeftToRightSwipe!”,ToastLength.Short.Show();
viewflipper.inaimation=INFOROMLEFTANIMATION();
viewflipper.OutAnimation=outToRightAnimation();
viewflipper.ShowPrevious();
}
受保护的void-bottomswipe()
{
//Toast.MakeText(活动“toptobttomswipe!”,ToastLength.Short.Show();
//活动。doSomething();
}
BottomToTopSwipe()上受保护的无效
{
//Toast.MakeText(活动“bottomtototopswipe!”,ToastLength.Short.Show();
//活动。doSomething();
}
公共bool OnTouch(视图v,运动事件e)
{
开关(电动)
{
案例MotionEventActions.Down:
{
downX=e.GetX();
绒毛=e.GetY();
返回true;
}
case MotionEventActions.Up:
{
upX=e.GetX();
upY=e.GetY();
浮动deltaX=downX-upX;
浮动三角洲=downY-upY;
//横扫?
如果(数学绝对值(deltaX)>最小距离)
{
//左还是右
如果(deltaX<0){this.onLeftToRightSwipe();返回true;}
如果(deltaX>0){this.onRightToLeftSwipe();返回true;}
}
其他的
{
//MakeText(活动,“Swipe仅为”+Math.Abs(deltaX)+“长,至少需要”+MIN_距离,ToastLength.Short)。Show();
返回false;
}
//垂直滑动?
如果(数学绝对值(deltaY)>最小距离)
{
//自上而下
if(deltaY<0){this.onTopToBottomSwipe();返回true;}
如果(deltaY>0){this.onBottomToTopSwipe();返回true;}
}
其他的
{
//MakeText(活动,“Swipe”仅“+Math.Abs(deltaX)+”长,至少需要“+MIN_距离,ToastLength.Short”);
返回false;
}
返回true;
}
}
返回false;
}
受保护的覆盖无效处置(布尔处置)
{
基地。处置(处置);
}
}
}