首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在加载内容时在ImageView中使用“动画圆”

在加载内容时在ImageView中使用“动画圆”
EN

Stack Overflow用户
提问于 2011-03-26 20:03:24
回答 5查看 284K关注 0票数 229

我目前正在我的应用程序中使用一个列表视图,它可能需要一秒钟才能显示。

我现在所做的就是使用listview的@id/android:empty属性来创建一个“加载”文本。

代码语言:javascript
复制
 <TextView android:id="@id/android:empty"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="#FF0000"
           android:text="Loading..."/>

现在,我想用加载对话框中使用的动画圆圈代替这个文本,我猜你们都知道我的意思:

编辑:我不想要一个对话框。我想在我的布局中展示这一点。

非常感谢您的帮助!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-29 07:27:39

只需将此xml块放入您的活动布局文件中:

代码语言:javascript
复制
<RelativeLayout
    android:id="@+id/loadingPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true" />
</RelativeLayout>

当你完成加载后,调用这一行:

代码语言:javascript
复制
findViewById(R.id.loadingPanel).setVisibility(View.GONE);

结果(它也会旋转):

票数 482
EN

Stack Overflow用户

发布于 2011-03-26 21:09:52

您可以使用以下xml来完成此操作

代码语言:javascript
复制
<RelativeLayout
    style="@style/GenericProgressBackground"
    android:id="@+id/loadingPanel"
    >
    <ProgressBar
        style="@style/GenericProgressIndicator"/>
</RelativeLayout>

使用这种风格

代码语言:javascript
复制
<style name="GenericProgressBackground" parent="android:Theme">
    <item name="android:layout_width">fill_parent</item>    
    <item name="android:layout_height">fill_parent</item>
    <item name="android:background">#DD111111</item>    
    <item name="android:gravity">center</item>  
</style>
<style name="GenericProgressIndicator" parent="@android:style/Widget.ProgressBar.Small">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:indeterminate">true</item> 
</style>

要使用它,您必须通过将可见性值设置为GONE来隐藏您的UI元素,并且每当加载数据时,对所有视图调用setVisibility(View.VISIBLE)来恢复它们。不要忘记调用findViewById(R.id.loadingPanel).setVisiblity(View.GONE)来隐藏正在加载的动画。

如果您没有加载事件/函数,但只希望加载面板在x秒后消失,请使用Handle来触发隐藏/显示。

票数 144
EN

Stack Overflow用户

发布于 2011-03-26 20:53:46

这通常称为不确定Progress Bar或不确定进度对话框。

将其与ThreadHandler结合使用,可以准确地获得您想要的内容。关于如何通过Google或就在这里这样做,有很多例子。我强烈建议您花时间学习如何使用这些类的组合来执行这样的任务。它在许多类型的应用程序中都非常有用,并将使您深入了解线程和处理程序如何协同工作。

我将让您开始了解它是如何工作的:

加载事件将启动对话框:

代码语言:javascript
复制
//maybe in onCreate
showDialog(MY_LOADING_DIALOG);
fooThread = new FooThread(handler);
fooThread.start();

现在线程完成了这项工作:

代码语言:javascript
复制
private class FooThread extends Thread {
    Handler mHandler;

    FooThread(Handler h) {
        mHandler = h;
    }

    public void run() { 
        //Do all my work here....you might need a loop for this

        Message msg = mHandler.obtainMessage();
        Bundle b = new Bundle();                
        b.putInt("state", 1);   
        msg.setData(b);
        mHandler.sendMessage(msg);
    }
}

最后,当它完成时,从线程获取状态:

代码语言:javascript
复制
final Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        int state = msg.getData().getInt("state");
        if (state == 1){
            dismissDialog(MY_LOADING_DIALOG);
            removeDialog(MY_LOADING_DIALOG);
        }
    }
};
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5442183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档