多数の画像を、パラパラ漫画のように切り替えていく方法について相談があり、投稿させていただきました。
以前、xmlファイルで画像を読み込む方法が簡単だということで、hirotn様にご回答いただき、
動作させることができました。
ありがとうございました。
携帯の実機にインストールし、エラーも出ず動作することも確認できたのですが、
画像を切り替えるタイミングがあまりにも遅くなっており困っています。
画像が多い場合は、メモリ不足等起こっているのでしょうか。
プログラムで解決できる方法があれば教えていただきたく、よろしくお願いします。
(ちなみに、xmlファイルで読み出すファイルは100枚程度(80MB程度)です。
もっと数を増やしたり、画質をよくしたいとも思っております。)
※サンプルは下記で見つけました。
http://monoist.atmarkit.co.jp/mn/articles/1205/2 …
(以下、プログラム)
package jp.test.animation.frame;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class FrameAnimationTestActivity extends Activity {
// ボタン
Button mBtnAnimation;
Button m5BtnAnimFromXML;
// ビュー
ImageView mImageAnimation;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBtnAnimation = (Button) findViewById( R.id.button_animation );
m5BtnAnimFromXML = (Button) findViewById( R.id.button_anim_from_xml );
mImageAnimation = (ImageView) findViewById( R.id.image_animation );
mBtnAnimation.setOnClickListener(mClickListener);
m5BtnAnimFromXML.setOnClickListener(mClickListener);
}
View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
// アニメーション中なら、停止
Drawable d = mImageAnimation.getBackground();
if( d != null ){
try{
if( ((AnimationDrawable) d).isRunning() ){
((AnimationDrawable) d).stop();
return;
}
}
catch( RuntimeException e ){
e.printStackTrace();
}
}
//if( v == mBtnAnimation ){
//frameAnimationTest(
//FrameAnimationTestActivity.this, mImageAnimation );
//}
if( v == m5BtnAnimFromXML ){
frameAnimationFromXMLTest( mImageAnimation );
}
}
};
// フレームアニメーションを XML から読み込む
void frameAnimationFromXMLTest( View v ){
// リソースからアニメーションを読み込み、ビューに設定
v.setBackgroundResource( R.drawable.droid_jump );
// ビューからアニメーションを取り出し
AnimationDrawable anim = (AnimationDrawable)v.getBackground();
// アニメーション開始
anim.start();
}
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
<animation-list android:id="@+id/selected" android:oneshot="false">
<item android:drawable="@drawable/wheel0" android:duration="50" />
AnimationDrawableのXMLを見ると、duration要素の値(ミリ秒で指定します)を短くすればよさそうです。
XMLが示されていないので一番思い当たるところとして回答します。
回答いただきありがとうございます。
XMLを記載しておりませんでしたが、DURATION=200msで設定しております。
画像50枚程度まではうまく動作したのですが、100にすると極端に遅くなってしまいました。
OUT OF MEMORY のエラーが表示するわけではないので、メモリ不足が原因かはわかりませんが。
下記のサイトでは、メモリを解放するプログラムが乗っておりました。
しかし上記プログラムにどう組み込めば良いかわからず、困っております。
もしわかるようであれば、教えていただけないでしょうか。
http://seesaakyoto.seesaa.net/article/365557192. …
private AnimationDrawable animation;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) this.findViewById(R.id.image);
animation = new AnimationDrawable();
// Bitmap生成時のオプション。
BitmapFactory.Options options = new Options();
// inPurgeableでBitmapを再利用するかどうかを明示的に決定
options.inPurgeable = true;
TypedArray images = getResources().obtainTypedArray(
R.array.animation_drawable);
for (int i = 0; i < images.length(); i++) {
animation.addFrame(
new BitmapDrawable(getResources(), BitmapFactory
.decodeResource(getResources(),
images.getResourceId(i, R.drawable.anim_1),
options)), 50);
}
// setBackgroundDrawableは非推奨
image.setImageDrawable(animation);
// ImageView全体に画像を拡大して表示する
image.setScaleType(ImageView.ScaleType.FIT_XY);
images.recycle();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//onCreate上ではアニメーションがスタートしない
animation.start();
}
?
arrays.xml
<resources>
<array name="animation_drawable">
<item>@drawable/anim_1</item>
<item>@drawable/anim_2</item>
<!-- ~省略~ -->
<item>@drawable/anim_20</item>
</array>
</resources>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) AndroidStudio エラー と インストール の件 1 2023/06/27 12:28
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
ActionForm form にnullが入っ...
-
ファイル名を動的に生成したい
-
干支の計算で。。。
-
シャットダウンフックが呼ばれない
-
import 文
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
Javaじゃんけんゲーム
-
かなり初歩的なプログラミング...
-
文字列を数式に
-
アプレットが初期化されていま...
-
透過GIFの判定の仕方ありますか?
-
アプレットを実行すると、×が表...
-
アルファベットのソート
-
HTMLでのTableタグデータ取得方法
-
応用情報技術者試験の令和元年...
-
1~100までの数字を表示し、か...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
シャットダウンフックが呼ばれない
-
Javaからストアド実行(配列項目)
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
Java での グローバルIP取得
-
python OpenPyXLを使って出力結...
-
データの外挿について
おすすめ情報