>source

스플래시 화면에 필요한 보기가 있습니다.

즉, 로딩과 거기에 애니메이션의 형태로 로딩을 0%에서 100%까지 표시합니다.

다음과 같이 하려고 하는데 이 방식이 별로 안 좋은데 작은 애니메이션으로 어떻게 하면 될까요?

현재 단편의 code는 다음과 같습니다.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    for (i in 0..100) {
        binding.loadingView.setText("Loading $i %")
    }
}

그리고 내 xml:

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">    <data class="SplashScreenBinding">        <import type="android.view.View" />        <variable
            name="viewModel"
            type="com.mandarine.aco.splash.SplashViewModel" />    </data>    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/main_background">        <ImageView
            android:id="@+id/appImageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:contentDescription="@string/app_name"
            android:scaleType="center"
            android:src="@drawable/logo" />        <TextView
            android:id="@+id/loadingView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="66dp"
            android:gravity="center_horizontal"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Loading"
            android:textColor="@android:color/white"
            android:textSize="42px"
            tools:text="Loading 43 %" />    </RelativeLayout></layout>

Q: 로드 프로세스를 0에서 100으로 애니메이션하려면 어떻게 해야 합니까?

그것은 당신이 가지고 있는 로딩 프로세스의 종류에 달려 있습니다. 그것은 단지 정해진 시간 동안 로딩하는 애니메이션인가요, 아니면 메인 스레드에서 진행 상황을 다시 보고할 무언가를 로딩하는 UI가 아닌 스레드가 있나요?

Ma3x2022-01-10 03:42:13

"여기 내 code가 지금 조각에 있습니다." --100%만 표시하면 됩니다. 메인 애플리케이션 스레드를 연결하고 있기 때문에 최종 번호만 렌더링되기 때문입니다. "로드 프로세스를 어떻게 애니메이션할 수 있습니까?" --어떤 종류의 애니메이션을 찾고 있는지 모르겠습니다. 단순히 100개의 숫자를 모두 표시하려는 경우 업데이트 사이에 약간의 지연을 도입하십시오. 예를 들어 루프를 코루틴으로 래핑하고 delay(250)를 사용하여 숫자 사이에 250밀리초를 지연시킬 수 있습니다.

CommonsWare2022-01-10 03:42:13

귀하의 code는 괜찮아 보입니다.

Sagar Balyan2022-01-10 03:42:13

@Ma3x는 물론 이것을 서버로 이동하는 것과 연결하는 것이 이상적이지만 현재로서는 2초 동안만 다운로드하는 것으로 제한할 수 있다고 생각합니다. 내 스플래시가 로드되는 데 2초가 걸리기 때문에

Morozov2022-01-10 03:42:13

@CommonsWare 예, 현재로서는 유한한 숫자만 얻습니다. 지연 또는 스레드 절전을 사용하여 애니메이션을 시도했지만 불행히도 작동하지 않았습니다. 다음 오류가 발생합니다. Suspend function 'animateLoadingProcess'는 코루틴 또는 다른 일시 중단 함수에서만 호출해야 합니다. 올바르게 작성하는 방법의 예를 공유할 수 있습니까?

Morozov2022-01-10 03:42:13

코루틴에서 일시 중단 재미를 시작해야 합니다. 조각에 있으므로 viewLifecycleOwner.lifecycleScope.launch { animateLoadingProcess() }로 충분할 것입니다. 라이프사이클 및 코루틴에 대한 문서를 참조하세요.

CommonsWare2022-01-10 03:42:13

@Morozov 진행률 표시줄을 업데이트해야 하는 백그라운드 스레드를 기반으로 로드 진행률을 설정하기로 결정했다면 특별히 다른 이야기이기 때문에 이에 대한 새 질문을 여세요. 이 경우에도 Coroutine을 사용할 수 있습니다. 위에서 이미 제안한 대로.

Ma3x2022-01-10 03:42:13
  • 이전 ValueError: python에서 voilin 플롯을 플로팅하는 동안 배열에 infs 또는 NaN이 포함되어서는 안 됩니다.
  • 다음 mariadb : 이 테이블이 위반하는 정규화 규칙은 무엇입니까?