animation後のsetLayoutParams設定時の画面のちらつき改善方法について

1,301 views
Skip to first unread message

pontuyo

unread,
Jan 24, 2011, 9:30:07 PM1/24/11
to 日本Androidの会
はじめまして、pontuyoといいます。

現在、下記のような感じでアニメーションが終了した後にsetLayoutParamsで
レイアウトの再設定をしているのですが、再設定を行った直後画面がちらついてしまいます。
setLayoutParamsを行う理由としてはTranslateAnimationだと、
実際には座標が変更されていないためです。

改善方法をご存知の方いらっしゃましたらご教授お願いします。


TranslateAnimation translate = new TranslateAnimation(0,0,0,
view.getHeight() - 75);
translate.setDuration(8000);
translate.setInterpolator(new DecelerateInterpolator());
translate.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {// not use}
@Override
public void onAnimationRepeat(Animation animation) {// not use}
@Override
public void onAnimationEnd(Animation animation) {
view.setLayoutParams(new LinearLayout.LayoutParams(480, 75));
}
});
view.startAnimation(translate);

awwa

unread,
Jan 24, 2011, 10:44:12 PM1/24/11
to android-g...@googlegroups.com
あわと申します。

今回のケースで利用出来るかわかりませんが、
考え方を逆にして、Layout的にAnimation後の位置にViewを配置しておいて、
そこに対してAnimationするようにしてみてはいかがでしょうか?

そうなると、アニメーション開始前には、当該viewのVisibilityをGONEにしておいて、
アニメーション開始と同時にVISIBLEにしてからアニメーションする
事になると思います。
すると、viewがVISIBLEになった瞬間、Animation後の位置にチラッと
viewがみえてしまうのでちょっと工夫が必要です。
詳しくはコチラ。

以前 Android-SDK-Japanに質問させていただいた内容です。

ではでは。

2011年1月25日11:30 pontuyo <kobar...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
----


pontuyo

unread,
Jan 25, 2011, 8:45:25 PM1/25/11
to 日本Androidの会
あわさま
ありがとうございます。

試しにAnimation用Viewと表示用Viewを作りアニメーションが終わった後に、
Animation用Viewと表示用ViewのVisibilityを切り替えてみた所ちらつきがでてしまいました。
ちらつきの改善方法もご存知でしたらご教授お願いします。
代替え案としてはAlphaAnimationも検討しています。

On 1月25日, 午後12:44, awwa <awwa...@gmail.com> wrote:
> あわと申します。
>
> 今回のケースで利用出来るかわかりませんが、
> 考え方を逆にして、Layout的にAnimation後の位置にViewを配置しておいて、
> そこに対してAnimationするようにしてみてはいかがでしょうか?
>
> そうなると、アニメーション開始前には、当該viewのVisibilityをGONEにしておいて、
> アニメーション開始と同時にVISIBLEにしてからアニメーションする
> 事になると思います。
> すると、viewがVISIBLEになった瞬間、Animation後の位置にチラッと
> viewがみえてしまうのでちょっと工夫が必要です。
> 詳しくはコチラ。http://awwa500.blogspot.com/2010/06/viewtranslate.html
>
> 以前 Android-SDK-Japanに質問させていただいた内容です。http://groups.google.com/group/android-sdk-japan/browse_thread/thread...
>
> ではでは。
>
> 2011年1月25日11:30 pontuyo <kobari1...@gmail.com>:
>
>
>
>
>
>
>
>
>
> > はじめまして、pontuyoといいます。
>
> > 現在、下記のような感じでアニメーションが終了した後にsetLayoutParamsで
> > レイアウトの再設定をしているのですが、再設定を行った直後画面がちらついてしまいます。
> > setLayoutParamsを行う理由としてはTranslateAnimationだと、
> > 実際には座標が変更されていないためです。
>
> > 改善方法をご存知の方いらっしゃましたらご教授お願いします。
>
> > TranslateAnimation translate = new TranslateAnimation(0,0,0,
> > view.getHeight() - 75);
> > translate.setDuration(8000);
> > translate.setInterpolator(new DecelerateInterpolator());
> > translate.setAnimationListener(new AnimationListener() {
> > @Override
> > public void onAnimationStart(Animation animation) {// not use}
> > @Override
> > public void onAnimationRepeat(Animation animation) {// not use}
> > @Override
> > public void onAnimationEnd(Animation animation) {
> > view.setLayoutParams(new LinearLayout.LayoutParams(480, 75));
> > }
> > });
> > view.startAnimation(translate);
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> --
> ----
> awwa <awwa...@gmail.com>
> Twitterhttp://twitter.com/awwa500
> Bloghttp://awwa500.blogspot.com/

わし(H&A-lab)

unread,
Jan 26, 2011, 8:38:08 AM1/26/11
to 日本Androidの会
こんばんは、わしです。

そもそもViewを移動させるのではあれば、Animationクラスを使わずに、scrollByかscrollToを使って、アニメーションロジッ
クを組めば、実体自体が移動するので、ちらつきません。
またAnimationクラスと違って、途中で止めた状態にすることができるので、自由度が増します(いらないかもですが)。
アニメーションの計算ロジックの作成が面倒であれば、Scrollerクラスがオススメです(レイヤー構成が許せばですが)。interpolater
を付加すれば、少し豪華なアニメーションを実現できます。
また、dispatchDraw()を使ってやれば、Animationクラスでは表現できないエフェクトも組み込むことができます(canvasや
Paintクラスを触れるので)。

実現したい用途が「Viewをアニメーションさせて移動させる」であると解釈しておりますので、間違っていたらすいません。
本来なら、サンプルソース等を添付するのがマナーなのかもしれませんが、娘と息子に邪魔されて、作る時間が・・・。
また、時間があるときに、ブログにでも記載します・・・。

的外れなことを書いていたら、すいません。

わし(H&A-lab)

unread,
Jan 28, 2011, 11:29:06 AM1/28/11
to 日本Androidの会
こんばんは、わしです。

サンプルプログラムをブログに載せました。
http://handalab.com/android/dev-2/view/112/
遅くなってすいません・・。

ついでに、的外れなことを書いてたら、すいません。って、謝ってばかりでもひとつすいません・・・。

pontuyo

unread,
Feb 4, 2011, 5:10:48 AM2/4/11
to 日本Androidの会
わし様
ご連絡大変遅くなりました。

Scroller盲点でした。
サンプルプログラムの紹介もありがとうございます。
これなら実現できそうです。
ありがとうございました。
Reply all
Reply to author
Forward
0 new messages