いくつかのビューのアルファチャンネルにプロパティアニメーションを設定しましたが、思ったとおりに機能していません。基本的に、3つTextView
の派生物があります。最初は非表示にしたいaTextView
と2つで、データが入ったときにデータを設定してからアニメーション化します。レイアウト内の他のいくつかのビューでこれを行いますが、同じ問題が発生することがあります。Views
非常にまれです。Logcatの出力によると、のデータが有効であっても、ほとんどの場合、TextView
と単純の1つはViews
表示されません。TextView
それは常に同じ2つのビューであり、それらが表示されることはめったにありませんが、私が見つけた予測可能な方法ではありません。レイアウトファイルのセクションとすべてのアニメーションコードが続きます。この質問に従って注意してください、レイアウトで可視性を非表示に設定し、アニメーションを開始する直前に表示に設定しました。
編集
問題が発生しているビューで`View.bringToFront()を呼び出しても、目に見える効果はありません。また、アニメーションを実行せずに、ビューの表示を非表示から表示に変更しただけでは表示されません。可視性変更コードとandroid:visibility = "invisible"タグをレイアウトから削除しても、ビューは表示されません。
レイアウト
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:qwerjk="http://schemas.android.com/apk/res/tenkiv.app"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp" >
<tenkiv.view.widget.MagicTextView
android:id="@+id/hourMinuteValueTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/secondValueTv"
android:lines="1"
android:textSize="77sp"
android:visibility="invisible"
qwerjk:strokeColor="@color/light_text_outline"
qwerjk:strokeJoinStyle="miter"
qwerjk:strokeWidth="1.8" />
<tenkiv.view.widget.MagicTextView
android:id="@+id/secondValueTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/hourMinuteValueTv"
android:layout_toLeftOf="@+id/amPmValueTv"
android:textSize="39sp"
android:visibility="invisible"
qwerjk:strokeColor="@color/light_text_outline"
qwerjk:strokeJoinStyle="round"
qwerjk:strokeWidth="1.3" />
<tenkiv.view.widget.MagicTextView
android:id="@+id/amPmValueTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/hourMinuteValueTv"
android:layout_alignParentRight="true"
android:textSize="31sp"
android:visibility="invisible"
qwerjk:strokeColor="@color/light_text_outline"
qwerjk:strokeJoinStyle="round"
qwerjk:strokeWidth="1.3" />
<tenkiv.view.widget.MagicTextView
android:id="@+id/dateValueTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/hourMinuteValueTv"
android:textSize="19sp"
android:visibility="invisible"
qwerjk:strokeColor="@color/light_text_outline"
qwerjk:strokeJoinStyle="round"
qwerjk:strokeWidth="0.9" />
<View
android:id="@+id/lineTimeConditionSepView"
android:layout_width="290dp"
android:layout_height="3dp"
android:layout_alignParentRight="true"
android:layout_below="@id/dateValueTv"
android:layout_marginTop="4dp"
android:background="@color/holo_text"
android:visibility="invisible" />
<View
android:id="@+id/lineTimeConditionSepViewOutline2"
android:layout_width="290dp"
android:layout_height="1dp"
android:layout_alignBottom="@id/lineTimeConditionSepView"
android:layout_alignLeft="@id/lineTimeConditionSepView"
android:layout_marginTop="0.5dp"
android:background="@color/location_area_dark_green"
android:visibility="invisible" />
---THE REST OF THE LAYOUT---
それをアニメーション化するための私のフラグメントの方法
public void onUpdateClock(final String time, final String seconds, final String ampm, final String date) {
Activity activity = getActivity(); //Used to make sure we dont update the clock with the activity dead
if (activity != null) {
if (mHourMinuteValue == null) { //These are all used together so this should be safe
mHourMinuteValue = (MagicTextView) activity.findViewById(R.id.hourMinuteValueTv);
mSecondValue = (MagicTextView) activity.findViewById(R.id.secondValueTv);
mAmPmValue = (MagicTextView) activity.findViewById(R.id.amPmValueTv);
mDateValue = (TextView) activity.findViewById(R.id.dateValueTv);
mTimeConditionsLine = activity.findViewById(R.id.lineTimeConditionSepView);
mTimeConditionsOutline2 = activity.findViewById(R.id.lineTimeConditionSepViewOutline2);
mTimeInAnim = createAnimation(CLOCK_IN);
}
}
if (mHourMinuteValue == null) {
Log.e(TAG, "Clock text views were null!");
return;
}
uiHandler.post(new Runnable() {
public void run() {
mHourMinuteValue.setText(time);
mSecondValue.setText(seconds);
if (ampm != null) {
mAmPmValue.setText(ampm);
} else {
mAmPmValue.setText(ClockUICallbacks.EMPTY_AMPM);
}
mDateValue.setText(date);
mDateValue.bringToFront();
if (mFadeInClock) {
setClockVisibility(true);
mTimeInAnim.start();
mFadeInClock = false;
}
}
});
private void setClockVisibility(boolean visible) {
int flag;
if (visible) {
flag = View.VISIBLE;
} else {
flag = View.INVISIBLE;
}
mHourMinuteValue.setVisibility(flag);
mSecondValue.setVisibility(flag);
mAmPmValue.setVisibility(flag);
mDateValue.setVisibility(flag);
mTimeConditionsLine.setVisibility(flag);
mTimeConditionsOutline2.setVisibility(flag);
}
private AnimatorSet createAnimation(int type) {
AnimatorSet set = new AnimatorSet();
switch (type) {
case CLOCK_IN:
ValueAnimator hourMinInAnim = ObjectAnimator.ofFloat(mHourMinuteValue, "alpha", INVISIBLE, OPAQUE);
hourMinInAnim.setDuration(FADE_IN_DURATION);
ValueAnimator secondInAnim = ObjectAnimator.ofFloat(mSecondValue, "alpha", INVISIBLE, OPAQUE);
secondInAnim.setDuration(FADE_IN_DURATION);
ValueAnimator amPmInAnim = ObjectAnimator.ofFloat(mAmPmValue, "alpha", INVISIBLE, OPAQUE);
amPmInAnim.setDuration(FADE_IN_DURATION);
ValueAnimator dateInAnim = ObjectAnimator.ofFloat(mDateValue, "alpha", INVISIBLE, OPAQUE);
dateInAnim.setDuration(FADE_IN_DURATION);
ValueAnimator timeLine1InAnim = ObjectAnimator.ofFloat(mTimeConditionsLine, "alpha", INVISIBLE, OPAQUE);
timeLine1InAnim.setDuration(FADE_IN_DURATION);
ValueAnimator timeLine2InAnim = ObjectAnimator.ofFloat(mTimeConditionsOutline2, "alpha", INVISIBLE, OPAQUE);
timeLine2InAnim.setDuration(FADE_IN_DURATION);
set.playTogether(hourMinInAnim, secondInAnim, amPmInAnim, dateInAnim, timeLine1InAnim, timeLine2InAnim);
return set;
/*SOME OTHER ANIMATIONS*/
}
return null;
}
必要になるかもしれない他の情報があれば私に知らせてください。
ありがとう、ジャレド