Xamarin Android - 如何在textview动画期间阻止文本移动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xamarin Android - 如何在textview动画期间阻止文本移动相关的知识,希望对你有一定的参考价值。
我必须在我的应用程序中做一些动画,但我有textview的问题。我需要为textview设置动画,然后从右上角进行比较。
这是我的布局:
<RelativeLayout
android:id="@+id/ThirdPartBottomLayout"
android:layout_width="2000dp"
android:layout_height="250dp"
android:layout_alignParentBottom="true"
android:background="@color/RedTA"
android:paddingTop="20dp"
android:paddingBottom="80dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/ThirdPartText1"
android:textSize="20dp"
android:textColor="#ffffff"
android:lines="1"
android:text="@string/Onboarding_Page3_Text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" />
<TextView
android:id="@+id/ThirdPartText2"
android:textSize="16dp"
android:textColor="#ffffff"
android:layout_below="@+id/ThirdPartText1"
android:text="@string/Onboarding_Page3_Text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center" />
</RelativeLayout>
</RelativeLayout>
这是我初始化变量的地方:
int widhtR1 = 0;
if (ThirdPartText1.Width > WidthPixel - PixelsToDp(50))
widhtR1 = WidthPixel - PixelsToDp(50);
else
widhtR1 = ThirdPartText1.Width;
lp = new RelativeLayout.LayoutParams(widhtR1,
ThirdPartText1.Height);
lp.LeftMargin = WidthPixel;
ThirdPartText1LeftMargin = (WidthPixel - widhtR1) / 2;
ThirdPartText1.LayoutParameters = lp;
int widhtR2 = 0;
if (ThirdPartText2.Width > WidthPixel - PixelsToDp(50))
widhtR2 = WidthPixel - PixelsToDp(50);
else
widhtR2 = ThirdPartText2.Width;
lp = new RelativeLayout.LayoutParams(widhtR2,
ThirdPartText2.Height);
lp.LeftMargin = WidthPixel;
lp.TopMargin = PixelsToDp(10);
lp.AddRule(LayoutRules.Below, Resource.Id.ThirdPartText1);
ThirdPartText2LeftMargin = (WidthPixel - widhtR2) / 2;
ThirdPartText2.LayoutParameters = lp;
要动画我使用ValueAnimator将LeftMargin从WidhtPixel移动到textview的minium left margin。我这样做了。
ThirdPartText1Animator = ValueAnimator.OfInt(1);
ThirdPartText1Animator.SetDuration(
ThirdPartText1AnimatorDuration);
ThirdPartText1Animator.SetInterpolator(new
AccelerateDecelerateInterpolator());
var lpTxt1 =
(RelativeLayout.LayoutParams)ThirdPartText1.LayoutParameters;
ThirdPartText1Animator.Update += (sender, e) =>
{
int val = (int)e.Animation.AnimatedValue;
Console.WriteLine("VAL TXT1:" + val);
lpTxt1.LeftMargin = WidthPixel - (int)((WidthPixel -
ThirdPartText1LeftMargin) * (val / 100f));
ThirdPartText1.LayoutParameters = lpTxt1;
};
ThirdPartText2Animator = ValueAnimator.OfInt(1);
ThirdPartText2Animator.SetDuration(
ThirdPartText2AnimatorDuration);
ThirdPartText2Animator.SetInterpolator(new
LinearInterpolator());
var lpTxt2 =
(RelativeLayout.LayoutParams)ThirdPartText2.LayoutParameters;
ThirdPartText2Animator.Update += (sender, e) =>
{
int val = (int)e.Animation.AnimatedValue;
Console.WriteLine("VAL TXT2:" + val);
lpTxt2.LeftMargin = WidthPixel - (int)((WidthPixel -
ThirdPartText2LeftMargin) * (val / 100f));
ThirdPartText2.LayoutParameters = lpTxt2;
};
/*** START WITH ****/
ThirdPartText1Animator.SetIntValues(0, 100);
ThirdPartText1Animator.Start();
ThirdPartText2Animator.SetIntValues(0, 100);
ThirdPartText2Animator.Start();
这就是动画开始时的问题,文本视图从右边比较但文本将移动以适应屏幕上的textview维度,而不是在textview真实维度上保持阻塞。
我怎么能避免在textview中移动文本。
希望我的信息足够,抱歉我的英语不好。
编辑
WidthPixel = Resources.DisplayMetrics.WidthPixels; AccelerateDecelerateInterpolator是一个Interpolator Android.Views.Animation
全班 OnboardingPage.cs OnboardingPageLayout.axml
提前致谢。
利玛窦。
对于每个人都有同样的问题,我想出了一个解决方案。 在第一次我使用左边距进行textview比较,所以当应用程序开始时我将左边距设置为屏幕宽度,当我需要使它出现时我减少左边距。 似乎如果你改变了textview的某些东西,就会被迫重新绘制每一个东西,所以也要改变它的高度。 为了避免这个问题,我创建了一个布局并将textview放在其中,并使用左边距的相同技巧来布局而不是textview和everythings工作。
对不起,我的英语不好。 希望对某人有所帮助。
以上是关于Xamarin Android - 如何在textview动画期间阻止文本移动的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.Form 应用程序中使用 text 属性为项目中的所有控件全局设置 FontFamily?
Xamarin.Android:如何捕获 OnClick XML 属性中定义的按钮事件?