通过viewSwitch实现加载进度条到内容显示的转场处理

想象一个情景:我打开一个activity,然后通过网络请求请求服务器数据,在数据未加载成功之前,为了不让界面显示空白,有时候我们会在界面添加一个加载对话框或是嵌入页面的加载进度条。如果遇到网络请求失败,我们还要显示一个网络连接失败界面提醒用户检查网络连接状态。或是加载成功后服务器没有没有相应的数据,我们则会显示一个“数据为空”来提醒用户...

这些看似与我们显示无关的内容:加载进度条,网络连接失败提醒,数据为空界面。我们都必须得手动的添加到每个activity中,这个重复的代码你会愿意这个干吗?

所以我有一个好的主意:按照上面的逻辑是我们把各种逻辑界面添加到们要显示的activity的内容,现在我们换一个位置,我们把每个activity界面显示内容添加到一个里面包含了各种的逻辑处理界面。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include layout="@layout/include_title" />

    <ViewSwitcher
        android:id="@+id/profileSwitcher"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:inAnimation="@android:anim/slide_in_left"
        android:outAnimation="@android:anim/slide_out_right" >


        <include
            android:id="@+id/include_progress_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"
            layout="@layout/include_progress" />
        
        <LinearLayout
            android:id="@+id/include_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"
            android:orientation="vertical" />
        
    </ViewSwitcher>

</LinearLayout>

这是我们可以通过ViewStub或include导入逻辑处理界面。上面的id号为:include_content就是我们要把内容添加进入的容器,所以,当我去完成一个activity布局的时候可以不用考虑标题栏或是逻辑处理界面,专心于每个activity的内容。我使用了android 的ViewSwitch控件用来对界面的显示或隐藏的状态切换,值得注意的是viewSwitch下的自控见都必须先隐藏。我还为这个控件添加了动画效果。

下一步是在actvity的是如何使用的,我把layout_common作为每个界面内容的父类,设置显示加载进度条进行等待。switcher.showNext();就可以显示下一个内容界面了。

<span style="white-space:pre">	</span>protected void onCreate(android.os.Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_common);
		View layout = View.inflate(this, R.layout.activity_news, null);
		ViewGroup include_content= (ViewGroup) findViewById(R.id.include_content);
		
		switcher = (ViewSwitcher) findViewById(R.id.profileSwitcher);
		include_content.addView(layout);
<span style="white-space:pre">		</span>switcher.setDisplayedChild(0);
	};
      以上就是我在数据加载到数据显示到界面的转场处理核心原理,很简单。下面还附上我的具体的小案例

   http://download.csdn.net/detail/iwantyousafe/8419377




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中实现加载进度条首先要使用异步加载场景的方式。当加载新场景时,我们可以通过使用Unity的异步操作来显示加载进度条,并在加载完成后跳转到另一个场景。 首先,在场景A中创建一个空物体,并给它添加一个C#脚本。在脚本中,我们可以使用以下代码来进行异步加载的操作: ```csharp using UnityEngine; using UnityEngine.SceneManagement; public class AsyncLoader : MonoBehaviour { public string nextSceneName; // 下一个场景的名称 void Start() { StartCoroutine(LoadNextSceneAsync()); } IEnumerator LoadNextSceneAsync() { AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(nextSceneName); // 异步加载下一个场景 asyncLoad.allowSceneActivation = false; // 禁止切换到下一个场景 while (!asyncLoad.isDone) { // 获取加载进度(范围:0-1) float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f); // 在这里更新你的进度条 UpdateProgressBar(progress); yield return null; } asyncLoad.allowSceneActivation = true; // 允许切换到下一个场景 } void UpdateProgressBar(float progress) { // 在这里更新你的进度条显示 } } ``` 然后,在场景A中添加一个你喜欢的进度条,可以是UI控件或者3D模型,然后将该进度条显示与UpdateProgressBar函数中的progress参数相关联。 最后,在场景A中将需要加载的新场景的名称赋值给AsyncLoader组件的nextSceneName变量。 这样,当场景A加载时,进度条将会根据加载的进度进行显示,当加载完成后,AsyncLoader会将allowSceneActivation属性设置为true,从而切换到另一个场景。这样就实现加载进度条显示前一个场景后跳转到另一个场景的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值