视图在布局上滑动

时间:2015-05-29 12:24:11

标签: android android-animation

我有相对布局。在其中我有许多视图,如编辑文本,文本视图等。我做了很多动画。一切都很好。但有一点,我有一个要求。

这是密码页面。创建并确认密码。两个edittexts一个接一个。如果密码不符合要求,普通橙色视图应向上滑动,并显示错误消息“密码无效”。

所以我在线性布局中创建并确认密码。线性布局将向上滑动,让用户输入密码。验证后,如果出现错误,线性布局应向下滑动,平面视图将向上滑动。我保持视图不可见,并在需要时使其可见并编写代码以向上滑动。当我只使用单个编辑文本而不是线性布局时,相同的代码可以工作。但是在使用线性布局时它无法正常工作。我做错了吗?

添加代码。特定于此问题的代码从编码结束开始

我将线性布局声明为视图而非VIEWGROUP。

编辑:在进行分析之后,我发现在滑动布局后我试图向上滑动的视图隐藏在视图层次结构的某处。

view.bringToFront()有助于将错误视图置于前面并向上滑动。

但之后问题是,在我的线性布局向下滑动后,错误视图不会立即向上滑动。因为我使用的是bringToFront(),所以它首先在整个屏幕上显示视图(背景颜色为橙色),然后开始滑动。

我不确定这是否正确,但我已经解决了这个问题。

  1. 没有给视图添加背景颜色
  2. 我在Layout slidedown动画侦听器的animationEnd()中使用了errorView.bringToFront()和errorView.setVisibility(true)。
  3. 我在布局滑动监听器的同一animationEnd()中定义了errorView的向上滑动动画
  4. 在errorView向上滑动动画侦听器的animationStart()中,我定义了errorView的背景颜色。现在按预期工作了。
  5. 但是让我知道更好的方法。

    //声明

    查看greyView,orangeView,yellowView,blueView,orangeErrorView,letsGetStartedView,welcomeBckView,passwordMasterLayout,orangePwdErrorView;     TextView welcomeText,errorTextView,letsGetStartedTextView,welcomeBckTxtView,errorPwdMsg;

    //密码错误处理

        orangePwdErrorView = v.findViewById(R.id.orangePasswordErrorView);
        errorPwdMsg = (TextView) v.findViewById(R.id.errorPasswordMessage);
    

    //布局代码

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sample_main_layout">
    
        <FrameLayout
            android:id="@+id/sample_content_fragment"
            android:layout_weight="76.4"
            android:layout_width="match_parent"
            android:layout_height="0px" />
    
        <FrameLayout
            android:id="@+id/bottomPanel"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="23.6">
        </FrameLayout>
    </LinearLayout>
    

    sample_content_fragment framelayout采用以下代码

     <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <View
            android:id="@+id/grey"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#58595B" />
    
        <View
            android:id="@+id/orange"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#F26724"
            android:visibility="invisible" />
    
    
    
        <View
            android:id="@+id/yellow"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FDB518"
            android:visibility="invisible" />
    
        <View
            android:id="@+id/blue"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#1893D2"
            android:visibility="invisible" />
    
    
    
    
    
    
        <TextView
            android:layout_width="260dp"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="@string/welcome"
            android:id="@+id/welcomeTextView"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="51dp"
            android:textColor="#ffffff"
            android:textSize="20dp"
            android:textStyle="bold"
            android:visibility="invisible"
            />
    
        <ImageView
            android:layout_height="60dp"
            android:layout_width="60dp"
            android:id="@+id/clinicloud_logo"
            android:clickable="true"
            android:src="@drawable/clinicloud_icon"
            android:layout_marginRight="50dp"
            android:layout_alignParentStart="true"
            android:layout_marginStart="35dp"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="40dp" />
    
        <View
            android:id="@+id/orangeErrorView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#F26724"
            android:visibility="invisible" />
    
    
    
    
    
        <EditText
            android:layout_width="match_parent"
            android:layout_height="90dp"
            android:inputType="textEmailAddress"
            android:ems="10"
            android:id="@+id/emailEditText"
            android:text="@string/enter_email"
            android:layout_gravity="center"
            android:background="#f4f4f4"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:visibility="invisible"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/errorMessage"
            android:layout_alignTop="@+id/welcomeTextView"
            android:layout_centerHorizontal="true"
            android:textColor="#ffffff"
            android:visibility="invisible"/>
    
        <!--UI components for welcome back page-->
    
        <View
            android:id="@+id/welcomeBackView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#134F9F"
            android:visibility="invisible" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/welcome_back"
            android:id="@+id/welcomeBackTxtView"
            android:textColor="#ffffff"
            android:layout_alignTop="@+id/welcomeTextView"
            android:layout_alignStart="@+id/clinicloud_logo"
            android:textSize="20dp"
            android:textStyle="bold"
            android:visibility="invisible"/>
    
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="90dp"
            android:ems="10"
            android:id="@+id/password"
            android:layout_alignTop="@+id/emailEditText"
            android:layout_alignParentStart="true"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:text="Password"
            android:visibility="invisible"
            android:background="#d2d1d1"
            />
    
    
        <!--UI components for Let's get started page-->
        <View
            android:id="@+id/letsGetStartedView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#5C3A91"
            android:visibility="invisible" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Let&apos;s get started"
            android:id="@+id/letsGetStartedTxtView"
            android:textColor="#ffffff"
            android:layout_alignTop="@+id/welcomeTextView"
            android:layout_alignStart="@+id/clinicloud_logo"
            android:textSize="20dp"
            android:textStyle="bold"
            android:visibility="invisible"/>
    
      <!--Linear layout to show the create and confirm password--> 
    
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="180dp"
            android:gravity="bottom"
            android:layout_alignBottom="@+id/emailEditText"
            android:layout_alignParentStart="true"
            android:weightSum="1"
            android:id="@+id/passwordMasterView"
            android:visibility="invisible">
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:id="@+id/createPwd"
                android:layout_weight="0.50"
                android:background="#F4F4F4"
                android:text="@string/create_password"
                />
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:id="@+id/confirmPwd"
                android:layout_weight="0.50"
                android:background="#E3E3E3"
                android:text="@string/confirm_password" />
        </LinearLayout>
    
        <!-- To show password errors-->
    
        <LinearLayout
            android:id="@+id/orangePasswordErrorView"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#F26724"
            android:visibility="invisible" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/errorPasswordMessage"
            android:layout_alignTop="@+id/welcomeTextView"
            android:layout_centerHorizontal="true"
            android:textColor="#ffffff"
            android:visibility="invisible"
            />
    
        <!-- To show password errors-->
    
    </RelativeLayout>
    

    java逻辑位于https://stackoverflow.com/questions/30523599/sliding-up-and-down-android

    请指示任何不正确的编码

2 个答案:

答案 0 :(得分:0)

  

我保持视图不可见,并在需要时将其显示出来并编写代码以便向上滑动。

我认为你必须在DialogFragment或自定义AlertDialog中执行它,它将显示在你的布局上方,如果不想这样做尝试在FrameLayout中包含你的RelativeLayout并在其中添加LinearLayout例如但是你的代码很难说明什么问题是

答案 1 :(得分:0)

你应该考虑使用一个用于滑动面板的库,我已经拥有了很好的经验(并且支持你的功能)是umano的AndroidSlidingUpPanel。 https://github.com/umano/AndroidSlidingUpPanel