我正在寻找一个包含动画可绘制的ImageButton,更确切地说是一个进度条微调器的重复补间动画(就像为此存在的视图/小部件)。
在xml中,我为活动布局中的ImageButton指定了这个:
<ImageButton android:id="@+id/i_back_cover" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:scaleType="centerInside"
android:gravity="center" android:layout_weight="1" android:adjustViewBounds="true"
android:src="@anim/progress_large">
</ImageButton>
“progress_large”动画位于res / anim /:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<rotate
android:drawable="@drawable/spinner_black_76"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="350"
android:duration="1200" />
</set>
我现在将toDegrees
设置为350,以确保它会旋转。 spinner_black_76
只是一张图片。
当我打开具有此布局的活动时,应用程序会在显示之前崩溃。
奇怪的是,日志中没有实际的堆栈跟踪,如果我是对的,只是一个被杀死的VM(我几乎不能相信这一点):
10-07 21:16:18.467: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.EDIT dat=content://net.lp.collectionista.products/items/book/1 cmp=net.lp.collectionista/.ui.activities.items.book.BookItemEditWindow }
10-07 21:16:18.687: DEBUG/AndroidRuntime(636): Shutting down VM
10-07 21:16:18.687: WARN/dalvikvm(636): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-07 21:16:18.687: DEBUG/FlurryAgent(636): Ending session
10-07 21:16:18.977: DEBUG/dalvikvm(636): GC_FOR_MALLOC freed 3876 objects / 597200 bytes in 98ms
10-07 21:16:19.007: WARN/ActivityManager(59): Force finishing activity net.lp.collectionista/.ui.activities.items.book.BookItemEditWindow
10-07 21:16:19.016: WARN/ActivityManager(59): Force finishing activity net.lp.collectionista/.ui.activities.collections.book.BookCollectionViewWindow
10-07 21:16:19.507: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{43fec528 net.lp.collectionista/.ui.activities.items.book.BookItemEditWindow}
10-07 21:16:21.437: INFO/Process(636): Sending signal. PID: 636 SIG: 9
10-07 21:16:21.487: INFO/ActivityManager(59): Process net.lp.collectionista (pid 636) has died.
10-07 21:16:21.517: INFO/WindowManager(59): WIN DEATH: Window{4400f330 net.lp.collectionista/net.lp.collectionista.ui.activities.CollectionsListWindow paused=false}
10-07 21:16:21.517: INFO/WindowManager(59): WIN DEATH: Window{43fc89d0 net.lp.collectionista/net.lp.collectionista.ui.activities.collections.book.BookCollectionViewWindow paused=true}
10-07 21:16:21.667: INFO/UsageStats(59): Unexpected resume of com.android.launcher while already resumed in net.lp.collectionista
10-07 21:16:21.727: WARN/InputManagerService(59): Got RemoteException sending setActive(false) notification to pid 636 uid 10034
10-07 21:16:27.237: DEBUG/dalvikvm(278): GC_EXPLICIT freed 32 objects / 1616 bytes in 81ms
10-07 21:18:14.047: DEBUG/AndroidRuntime(654): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
在这种情况下我做错了什么?或者什么是一个更好的方法来获得一个按钮顶部微调器的进度条?
答案 0 :(得分:4)
好的,所以这个问题有一个接受的答案,并且是18个月前,但为了以防其他人发现这个,这似乎对我有用:
在xml布局中:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:gravity="center">
<ImageButton
android:id="@+id/property_button_gps"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:paddingTop="@dimen/standardPadding"
android:paddingBottom="@dimen/standardPadding"
android:background="@drawable/gps_blank"
android:src="@drawable/gps_icon">
</ImageButton>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<ProgressBar
android:id="@+id/property_gps_spinner"
style="@android:style/Widget.ProgressBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/standardPadding"
android:paddingBottom="@dimen/standardPadding"
android:background="@null"
android:visibility="gone" />
</LinearLayout>
</FrameLayout>
,这在java代码中:
/**
* This method will hide the GPS button image and replace it with a loading spinner
*/
private void showGpsLoading() {
gpsSpinner.setVisibility(View.VISIBLE);
gpsButton.setImageDrawable(null);
}
/**
* This method will hide the GPS loading spinner and replace it with the GPS button image.
*/
public void hideGpsLoading() {
gpsSpinner.setVisibility(View.GONE);
gpsButton.setImageResource(R.drawable.gps_icon);
}
答案 1 :(得分:3)
:: smacks额头::
我应该在开始评论之前意识到这一点。
我正在寻找一个包含动画可绘制的ImageButton,更确切地说是一个进度条微调器的重复补间动画(就像为此存在的视图/小部件)。
那不是AnimationDrawable
。 AnimationDrawable
是帧动画,而不是补间动画。由于动画XML的documentation表示:
编译资源数据类型:指向动画的资源指针。
编译资源数据类型:指向AnimationDrawable的资源指针。
因此,我认为你不能按照你想要做的方式做你想做的事。您可以使用框架动画并使用少量手动旋转的图形版本。