Интерфейс Android: ImageButton с анимацией - PullRequest
1 голос
/ 07 октября 2010

Я пытаюсь создать 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 - это просто изображение.

Когда я открываю действие с таким макетом, приложение вылетает перед отображением.

Странно, в журнале нет фактической трассировки стека, просто убитая виртуальная машина, если я прав (я сам вряд ли могу в это поверить):

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 <<<<<<<<<<<<<<

Что я делаю не так в этомдело?Или что может быть лучше, если вы получите круговую кнопку-индикатор выполнения над кнопкой?

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

ОК, так что на этот вопрос есть принятый ответ, и он был 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);
}
3 голосов
/ 08 октября 2010

:: чмокает лоб ::

Я должен был понять это, прежде чем приступить к комментариям.

Я пытаюсь создать ImageButton, который содержит анимацию, которую можно рисовать, точнее, повторяющуюся анимацию движения блесны индикатора прогресса (например, вид / виджет, который существует для этого).

Это не AnimationDrawable. AnimationDrawable - это анимация кадров, а не анимация движения. В документации для вашей анимации XML указывает:

скомпилированный тип данных ресурса: указатель ресурса на анимацию.

, тогда как для кадровой анимации :

тип данных скомпилированного ресурса: указатель ресурса на AnimationDrawable.

Следовательно, я не думаю, что вы можете делать то, что вы пытаетесь сделать так, как вы пытаетесь это сделать. Вы можете использовать рамочную анимацию и несколько версий графики, вращаемых вручную.

...