0

我看到了一些例子,对于我需要的东西来说似乎有点矫枉过正,所以我只想做一些简单的事情,比如:

在我的活动中,我会这样做:

ProgressBar bar = bar=(ProgressBar)findViewById(R.id.progress);

然后在我的布局中我会这样做:

<ProgressBar android:id="@+id/progress"
    style="?android:attr/progressBarStyleHorizontal"
    android:src="@drawable/ajax-loader"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

我已将此图像http://problemio.com/img/ajax-loader.gif放入我的图像目录中。

但是我收到一个编译错误,即 .gif 文件不应该在这些目录中。这是错误:

res\drawable-hdpi\ajax-loader.gif: Invalid file name: must contain only [a-z0-9_.]

我也不确定我是否正确创建了进度条布局。我在这里的正确方法是什么?还是我完全偏离了轨道?:)

谢谢!

4

1 回答 1

1

您的可绘制名称不正确,因为错误消息明确指出。你必须这样命名你的图像ajax_loaderNOT ajax-loader。这样做的原因是 ADT 创建了R具有自动分配的已用资源 ID 的数组。而且由于R只是常规的 Java 代码,所有标识都是基于文件名构建的,因此这样的名称ajax-loader是无效的,因为您应该能够引用这个可绘制对象,因为这R.drawable.ajax-loader意味着从 R.drawable.ajax 变量中减去加载器变量。这不是您想要的(出于同样的原因,您不能在资源名称中包含空格)。另一件事是您应该使用 PNG 作为资源,而不是 GIF。如果您想要动画,请将您的 GIF 动画转换为单独的图像并使用Android 的帧动画功能

因此,为了解决您的问题,您应将资源重命名ajax_loader.gif为正确的命名方案。但是,它将被拒绝,因为它是 GIF 而不是 PNG。我的建议是将此 GIF 加载到 IE GIMP 中,将每个帧保存为单独的可绘制对象(即ajax_loader_01.pngajax_loader_02.png)。并ajax_loader.xmlres/drawable文件夹中创建,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/ajax_loader_01" android:duration="200" />
    <item android:drawable="@drawable/ajax_loader_02" android:duration="200" />
    ...
</animation-list>

然后将其用作布局中的可绘制对象(因此您应该单独引用R.drawable.ajax_loader,而不是单独的框架)。调整持续时间以匹配 GIF 动画,您就完成了。

于 2012-09-05T15:44:45.890 回答