ImageView
スムーズなアニメーションで画面の左から右にスライドさせる必要があります(ImageView
遷移中に が表示されるようにしたい)。次のコードを試しました。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
camion.animate()
.translationX(width)
.setDuration(2000)
.setInterpolator(new LinearInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
//camion.setVisibility(View.GONE);
}
});
動きImageView
はしますが、アニメーションが遅く、思ったようにスムーズではありません。コードのどこが間違っているのでしょうか?
ベストアンサー1
このようなトゥイーンアニメーションの作成は簡単です。以下の手順に従ってください。
ステップ1
anim
ディレクトリ内にディレクトリを作成しres
、これを次のように配置します。slide.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true">
<translate
android:fromXDelta="0%p"
android:toXDelta="75%p"
android:duration="800" />
</set>
fromXDelta
2つの属性とを変更することでアニメーションをカスタマイズできますtoXDelta
。%pを指す親への敬意これは、親に対して画像を 75% 移動することを意味します。
ステップ2
// Refer the ImageView like this
imageView = (ImageView) findViewById(R.id.img);
// Load the animation like this
animSlide = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.slide);
// Start the animation like this
imageView.startAnimation(animSlide);
setInterpolator()
必要に応じて、 および を使用することもできますsetListeners()
。ここでは、簡単にするために説明していません。必要な場合は、お知らせください。
注記
あなたが繰り返し述べているように、あなたはアニメーションが遅いこのアニメーションをテストしました3台の実機と2台のエミュレーターでアニメーションは滑らかでしたすべてに。Moto E などのローエンドデバイスから Nexus 5 や Galaxy S6 などのハイエンドデバイスまでテスト済み。
このコードを実行してもまだ遅延が発生する場合は、テスト デバイスに原因があるはずです。コードは完璧です。
アップデート
私もLollipopでMoto Gを動作させて確認しましたが、アニメーションはスムーズに動作しています。これは非常に小さくて軽いアニメーションなので、遅れることはありません。それでも遅れる場合は、テストしているデバイス、またはそのアクティビティ上の他のコードがUIを遅くしたり応答しなくなったりしている可能性があります。。
どれが自分に当てはまるか確認してみてください。
- 合計6台のデバイスでテストしましたが、遅延はまったくありませんでした。そのため、製品版アプリに遅延は発生しません。遅いのはデバイス側だけかもしれません。
- 次のような重い操作を行う場合ファイル システム、データベース、またはその他の負荷の高い操作にアクセスすると、UI スレッドの速度が低下し、フレームが失われます。
AsyncTask
重い操作には使用してみてください