在 android 中将 Scrollview 隐藏在 Imageview 后面,反之亦然

Hide Scrollview behind Imageview and vice-versa in android

我是 android studio 和 kotlin 的业余爱好者。我正在实现一个仪表板,其中我将框架布局作为 bodylayout,并在单击 bottomnavigationview 上的每个项目时替换为不同的片段。但是,对于一个特定项目,我需要使用两个视图、图像视图和滚动视图。因此,当滚动视图中的进度条不包含任何进度时,我必须显示隐藏滚动视图的 Imageview 并同时禁用滚动。但是当滚动视图的进度条有一些进展时,应该显示滚动视图及其内容而不是图像视图。

我在相同的上下文中看到了一些答案,但它对我不起作用。那么,我想知道该怎么做?我是不是做错了。

代码片段如下。

class ProgressFragment : Fragment() {

val TAG = "ProgressFragment"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_progress, container, false)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    progress_progressbar2?.setProgress(5)
    progress_progressbar2?.max=15

    if (progress_progressbar2?.progress!!.equals(0)){
        started_image?.bringToFront()
        progress_scrollview?.invalidate()
    }
    else{
        progress_scrollview?.bringToFront()
        started_image?.invalidate()
        navigation_header_container?.setImageResource(R.drawable.header_pink)
    }
  }
}

我在主活动中调用这个片段,并在主活动中用这个片段替换框架布局。

activity_main.xml布局如下。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg"
tools:context=".MainActivity">
<ImageView
android:id="@+id/navigation_header_container"
android:layout_width="match_parent"
android:layout_height="65dp"
android:scaleY="1.5"
android:scaleX="2"
android:src="@drawable/header_green"
/>
<FrameLayout
    android:id="@+id/main_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="75dp"
    android:layout_above="@id/bottom_nav"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/navigation_header_container"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true">

</FrameLayout>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_nav"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    app:itemBackground="@color/colorWhite"
    app:itemTextColor="@color/nav_item_colors"
    app:menu="@menu/bottom_navigation">

</android.support.design.widget.BottomNavigationView>

<TextView
    android:id="@+id/header_text"
    android:layout_width="156dp"
    android:layout_height="39dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="12dp"
    android:gravity="center"
    android:textSize="20dp"
    android:textColor="#200"
    android:textStyle="bold"
    android:text="TextView" />
<!--app:itemIconTint="@color/nav_item_colors"-->
<!--app:itemTextColor="@color/nav_item_colors"-->


</RelativeLayout>

进度布局如下。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProgressFragment">

<!-- TODO: Update blank fragment layout -->

<ScrollView
    android:id="@+id/progress_scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/progress_parentrelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/progress_child1relayout"
            android:layout_width="190dp"
            android:layout_height="280dp">

            <TextView
                android:id="@+id/quadrant1_textview1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="60sp"
                android:layout_marginTop="90dp"
                android:gravity="center"
                android:text="Min"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <ProgressBar
                android:id="@+id/progress_progressbar1"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="35dp"
                android:layout_marginTop="140dp"
                android:progressDrawable="@drawable/customprogressbar" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/progress_child2relayout"
            android:layout_width="190dp"
            android:layout_height="280dp"
            android:layout_below="@+id/progress_child1relayout">

            <TextView
                android:id="@+id/quadrant2_textview1"
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="40sp"
                android:layout_marginStart="40sp"
                android:layout_marginTop="70dp"
                android:text="Challenge Status"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <ProgressBar
                android:id="@+id/progress_progressbar2"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="40dp"
                android:layout_marginStart="40dp"
                android:layout_marginTop="160dp"
                android:progressDrawable="@drawable/customprogressbar" />

            <TextView
                android:id="@+id/quadrant2_textview2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="42dp"
                android:layout_marginTop="130dp"
                android:text="Completed"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/quadrant2_textview3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="45dp"
                android:layout_marginTop="190dp"
                android:text="open"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/quadrant2_textview4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="45dp"
                android:layout_marginTop="230dp"
                android:text="0"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/progress_child3relayout"
            android:layout_width="190dp"
            android:layout_height="280dp"
            android:layout_toRightOf="@+id/progress_child1relayout">

            <TextView
                android:id="@+id/quadrant3_textview1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="60sp"
                android:layout_marginTop="90dp"
                android:gravity="center"
                android:text="TextView"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/progress_child4relayout"
            android:layout_width="190dp"
            android:layout_height="280dp"
            android:layout_below="@id/progress_child3relayout"
            android:layout_toRightOf="@+id/progress_child2relayout">

            <TextView
                android:id="@+id/quadrant4_textview1"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="60sp"
                android:layout_marginTop="70dp"
                android:text="Pods Mastered"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                android:id="@+id/circularprogress"
                android:layout_width="150dp"
                android:layout_height="70dp"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="130dp"
                android:progress="20" />
            <!--<ProgressBar-->
            <!--android:id="@+id/progress_progressbar3"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"-->
            <!--android:layout_marginTop="120dp"-->
            <!--android:layout_marginLeft="50sp"-->
            <!--android:indeterminateDrawable="@drawable/ringprogressbar"-->
            <!--android:max="100"-->
            <!--android:progress="20"-->
            <!--style="?android:attr/progressBarStyleLarge" />-->

        </RelativeLayout>

        <TextView
            android:id="@+id/whatdoesthis_mean"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="580dp"
            android:clickable="true"
            android:gravity="center"
            android:text="What does this mean?"
            android:textColor="#200"
            android:textSize="15dp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/child_button"
            android:layout_width="344dp"
            android:layout_height="79dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="620dp"
            android:src="@drawable/pinkcolor"
            android:text="child name" />

        <TextView
            android:id="@+id/child_name_text"
            android:layout_width="184dp"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="11dp"
            android:fontFamily="sans-serif"
            android:gravity="center"
            android:text="Child Name"
            android:textColor="#190fdf"
            android:textSize="30sp"
            android:textStyle="bold" />

    </RelativeLayout>

</ScrollView>
<ImageView
    android:id="@+id/started_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/letsgetstarted"
    android:background="#ebcac3c7"
    />

</FrameLayout>

感谢任何帮助。

val currentProgress = progress_progressbar2?.progress ?: 0
if (currentProgress == 0){
    started_image?.visibility = VISIBLE
    progress_scrollview?.visibilty = GONE
} else {
    started_image?.visibility = GONE
    progress_scrollview?.visibilty = VISIBLE
    navigation_header_container?.setImageResource(R.drawable.header_pink)
}

您可以使用视图的 visibility 来管理它,而不是 bringToFront

Android 文档:https://developer.android.com/reference/android/view/View.html#setVisibility(int)

试试这个

片段不会在 OnCreate 中创建视图,这与 Activity 不同。同样可以通过片段的生命周期来理解。此外,这是 activity 生命周期和片段生命周期之间的主要区别之一。因此,不应在 OnCreate 中分配值,而应在 OnViewCreated.

中完成

代码片段可以修改为:

class ProgressFragment : Fragment() {

val TAG = "ProgressFragment"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_progress, container, false)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    progress_progressbar2?.setProgress(12)
    progress_progressbar2?.max=15
    val currentProgress = progress_progressbar2?.progress ?: 0
    if (currentProgress == 0){
        started_image?.visibility = View.VISIBLE
        progress_scrollview?.visibility = View.GONE
    } else {
        started_image?.visibility = View.GONE
        progress_scrollview?.visibility = View.VISIBLE
        navigation_header_container?.setImageResource(R.drawable.header_pink)
    }
  }
}

条件和static/dynamic进度分配也可以在OnResume方法中完成。

谢谢毗湿奴。