7

問題の説明


私はAndroid用のシンプルなウィジェットアプリケーションを書いています。ウィジェットIレイアウトでは、ImageViewRefresh画像の更新(下の緑色の画像)を設定するコントロールがあります。

質問


ある時点ImageViewRefresh で、ウィジェットのボタンを押すと、アプリケーションがインターネットからコンテンツのダウンロードを開始します。アプリケーションがバックグラウンドでデータをダウンロードしているときに、画像を回転させるなどのアニメーションを作成します(下の緑色の画像)。それをしてもいいですか ?

研究


画像アニメーションに関するいくつかの投稿を読みましたが、アプリケーションで.gif画像のアニメーションしか見つけることができません。たとえば、画像を回転させて、回転させた画像を作成したり、変更したりする方法があります。

コード例

これが私の画像のコードの一部ですlayout。回転していません。なんで ?(私の画像は単純な.png画像です)

<ProgressBar
        android:id="@+id/progressBarRefresh"
        android:layout_width="36dp"
        android:indeterminateDrawable="@drawable/arrow_refresh"
        android:layout_height="36dp"
        android:layout_alignTop="@+id/imageViewArrowNext"
        android:layout_marginRight="70dp"
        android:layout_toLeftOf="@+id/textViewAutherName"
        android:indeterminate="true" />

回転させたい画像。

画像を回転

4

2 に答える 2

4

編集:事前に謝罪しますが、私の答えは質問から誤解を招く可能性があると思います:

  • テストされたように、システムはドローアブルを自動的に回転させませんが、それを行うために変更できるスタイルがあります(正直なところ、覚えていません。2年前にEclairで使用されています)が、見つけることができます。
  • 以下の答えは(テストされたとおりに)機能しますが、カスタムドローアブルの場合は回転しません。
  • カスタムアニメーションドローアブルについては、こちらを参照してください:ProgressBar/ProgressDialogのカスタムドローアブル
  • しかし、コメントの1つで述べたように、アプリウィジェットはアニメーションを実行することは想定されていません。ホームウィジェットでアニメーション化する方法はありますか?

元の投稿:

ウィジェットを自分でアニメーション化しようとしないでください

ProgressBar不確定にsetIndeterminateDrawable(Drawable d);設定し、回転させたい画像を設定します。(または、非常に見栄えのするネイティブのものをそのままにします)

編集: コードは次のようになります:

// in your widget update method:
View v = LayoutInflater.from(context).inflate(R.layout.widget, null);
ProgressBar pb = (ProgressBar) v.findViewById(R.id.progressBar1);
pb.setIndeterminateDrawable(R.drawable.widget_processing);

このようなもののXMLは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/imageView1"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imageView1"
    android:layout_alignLeft="@+id/textView1"
    android:text="Small Text"
    android:textAppearance="?android:attr/textAppearanceSmall" />

<ProgressBar
    android:id="@+id/progressBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:indeterminate="true" />

</RelativeLayout>
于 2012-12-19T11:38:59.963 に答える
-1

Android で画像をアニメーション化する最良の方法は、AnimationDrawable システムを使用することです。これを行うには、ドローアブル フォルダーの 1 つに以下のような xml が必要です。

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/image1" android:duration="200" />
    <item android:drawable="@drawable/image2" android:duration="200" />
    <item android:drawable="@drawable/image3" android:duration="200" />
</animation-list>

ここで、image1、image2、および image3 はリソース内の異なるドローアブルであり、それぞれがイメージの異なる状態を表しています。

画像を作成するには、Gimp または Photoshop で画像を開き、数度回転して新しい画像にエクスポートし、繰り返します。

または、次のコードを使用して ImageView を回転させることもできます。最初に res フォルダーの下に「anim」フォルダーを作成し、次の内容のrotate.xml ファイルを追加します。

<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1000"
    android:startOffset="0"
/>

次に、次のようにアニメーションをインポートして開始します。

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation);
rotation.setRepeatCount(Animation.INFINITE);
imageView.startAnimation(rotation);
于 2012-12-19T11:33:30.220 に答える