Android.Util.Property Class C# 中的实现
Android.Util.Property Class Implemention in C#
几天来我一直在努力寻求帮助,但也许我没有找到正确的地方。
我正在关注这篇文章来复制像按钮动画一样的 Twitter(我不想使用重建的库)- http://frogermcs.github.io/twitters-like-animation-in-android-alternative/
我有一个名为 LikeButtonView
的自定义视图
public class LikeButtonView : FrameLayout, View.IOnClickListener
{
private static DecelerateInterpolator DECCELERATE_INTERPOLATOR = new DecelerateInterpolator();
private static AccelerateDecelerateInterpolator ACCELERATE_DECELERATE_INTERPOLATOR = new AccelerateDecelerateInterpolator();
private static OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(4);
private ImageView ivStar;
private DotsView vDotsView;
private AnimatorSet animatorSet;
public LikeButtonView(Context context, IAttributeSet attrs) :
base(context, attrs)
{
Initialize();
}
public LikeButtonView(Context context, IAttributeSet attrs, int defStyle) :
base(context, attrs, defStyle)
{
Initialize();
}
public void OnClick(View v)
{
vDotsView.setCurrentProgress(0);
animatorSet = new AnimatorSet();
ObjectAnimator starScaleYAnimator = ObjectAnimator.OfFloat(ivStar, ImageView.ScaleYs, 0.2f, 1f);
starScaleYAnimator.SetDuration(350);
starScaleYAnimator.StartDelay = (250);
starScaleYAnimator.SetInterpolator(OVERSHOOT_INTERPOLATOR);
ObjectAnimator starScaleXAnimator = ObjectAnimator.OfFloat(ivStar, ImageView.ScaleXs, 0.2f, 1f);
starScaleXAnimator.SetDuration(350);
starScaleXAnimator.StartDelay = (250);
starScaleXAnimator.SetInterpolator(OVERSHOOT_INTERPOLATOR);
ObjectAnimator dotsAnimator = ObjectAnimator.OfFloat(vDotsView, DotsView.DOTS_PROGRESS, 0.2f, 1f);
dotsAnimator.SetDuration(900);
dotsAnimator.StartDelay = (50);
dotsAnimator.SetInterpolator(ACCELERATE_DECELERATE_INTERPOLATOR);
animatorSet.PlayTogether(
starScaleYAnimator,
starScaleXAnimator,
dotsAnimator
);
animatorSet.Start();
}
private void Initialize()
{
var INF = LayoutInflater.From(Context).Inflate(Resource.Layout.view_like_button, this, true);
ivStar = INF.FindViewById<ImageView>(Resource.Id.ivStar);
vDotsView = INF.FindViewById<DotsView>(Resource.Id.vDotsView);
SetOnClickListener(this);
}
}
我也在使用 private DotsView vDotsView
,这是另一个自定义视图,它是此视图的 C# 副本 https://github.com/frogermcs/LikeAnimation/blob/master/app/src/main/java/frogermcs/io/likeanimation/DotsView.java
在上面link的最后,我看到了下面的
public static final Property<DotsView, Float> DOTS_PROGRESS = new Property<DotsView, Float>(Float.class, "dotsProgress") {
@Override
public Float get(DotsView object) {
return object.getCurrentProgress();
}
@Override
public void set(DotsView object, Float value) {
object.setCurrentProgress(value);
}
};
是Android.Util.Property习惯get
和set
进步
ObjectAnimator dotsAnimator = ObjectAnimator.OfFloat(vDotsView, DotsView.DOTS_PROGRESS, 0.2f, 1f);
我在这里迷路了,我不知道如何在 C# 中实现它?我一直在尝试不同的事情,但没有用确切的参数实现 public static final Property<DotsView, Float> DOTS_PROGRESS
的运气。
如果有人能提供帮助,我们将不胜感激。
如果这对任何人有帮助,我们可以做类似下面的事情
[Register("DOTS_PROGRESS")]
public static Property DotsProgress {
get {
JniObjectReference objectValue = _members.get_StaticFields().GetObjectValue("DOTS_PROGRESS.Landroid/util/Property;");
return Object.GetObject<Property>(objectValue.get_Handle(), 1);
}
}
找到这个从 java 转换为 C# 的包
https://www.fuget.org/packages/Karamunting.Android.HanksZyh.SmallBang/1.2.2/lib/monoandroid81/SmallBang.dll/Hanks.Library.Bang/DotsView?code=true
几天来我一直在努力寻求帮助,但也许我没有找到正确的地方。
我正在关注这篇文章来复制像按钮动画一样的 Twitter(我不想使用重建的库)- http://frogermcs.github.io/twitters-like-animation-in-android-alternative/
我有一个名为 LikeButtonView
public class LikeButtonView : FrameLayout, View.IOnClickListener
{
private static DecelerateInterpolator DECCELERATE_INTERPOLATOR = new DecelerateInterpolator();
private static AccelerateDecelerateInterpolator ACCELERATE_DECELERATE_INTERPOLATOR = new AccelerateDecelerateInterpolator();
private static OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(4);
private ImageView ivStar;
private DotsView vDotsView;
private AnimatorSet animatorSet;
public LikeButtonView(Context context, IAttributeSet attrs) :
base(context, attrs)
{
Initialize();
}
public LikeButtonView(Context context, IAttributeSet attrs, int defStyle) :
base(context, attrs, defStyle)
{
Initialize();
}
public void OnClick(View v)
{
vDotsView.setCurrentProgress(0);
animatorSet = new AnimatorSet();
ObjectAnimator starScaleYAnimator = ObjectAnimator.OfFloat(ivStar, ImageView.ScaleYs, 0.2f, 1f);
starScaleYAnimator.SetDuration(350);
starScaleYAnimator.StartDelay = (250);
starScaleYAnimator.SetInterpolator(OVERSHOOT_INTERPOLATOR);
ObjectAnimator starScaleXAnimator = ObjectAnimator.OfFloat(ivStar, ImageView.ScaleXs, 0.2f, 1f);
starScaleXAnimator.SetDuration(350);
starScaleXAnimator.StartDelay = (250);
starScaleXAnimator.SetInterpolator(OVERSHOOT_INTERPOLATOR);
ObjectAnimator dotsAnimator = ObjectAnimator.OfFloat(vDotsView, DotsView.DOTS_PROGRESS, 0.2f, 1f);
dotsAnimator.SetDuration(900);
dotsAnimator.StartDelay = (50);
dotsAnimator.SetInterpolator(ACCELERATE_DECELERATE_INTERPOLATOR);
animatorSet.PlayTogether(
starScaleYAnimator,
starScaleXAnimator,
dotsAnimator
);
animatorSet.Start();
}
private void Initialize()
{
var INF = LayoutInflater.From(Context).Inflate(Resource.Layout.view_like_button, this, true);
ivStar = INF.FindViewById<ImageView>(Resource.Id.ivStar);
vDotsView = INF.FindViewById<DotsView>(Resource.Id.vDotsView);
SetOnClickListener(this);
}
}
我也在使用 private DotsView vDotsView
,这是另一个自定义视图,它是此视图的 C# 副本 https://github.com/frogermcs/LikeAnimation/blob/master/app/src/main/java/frogermcs/io/likeanimation/DotsView.java
在上面link的最后,我看到了下面的
public static final Property<DotsView, Float> DOTS_PROGRESS = new Property<DotsView, Float>(Float.class, "dotsProgress") {
@Override
public Float get(DotsView object) {
return object.getCurrentProgress();
}
@Override
public void set(DotsView object, Float value) {
object.setCurrentProgress(value);
}
};
是Android.Util.Property习惯get
和set
进步
ObjectAnimator dotsAnimator = ObjectAnimator.OfFloat(vDotsView, DotsView.DOTS_PROGRESS, 0.2f, 1f);
我在这里迷路了,我不知道如何在 C# 中实现它?我一直在尝试不同的事情,但没有用确切的参数实现 public static final Property<DotsView, Float> DOTS_PROGRESS
的运气。
如果有人能提供帮助,我们将不胜感激。
如果这对任何人有帮助,我们可以做类似下面的事情
[Register("DOTS_PROGRESS")]
public static Property DotsProgress {
get {
JniObjectReference objectValue = _members.get_StaticFields().GetObjectValue("DOTS_PROGRESS.Landroid/util/Property;");
return Object.GetObject<Property>(objectValue.get_Handle(), 1);
}
}
找到这个从 java 转换为 C# 的包 https://www.fuget.org/packages/Karamunting.Android.HanksZyh.SmallBang/1.2.2/lib/monoandroid81/SmallBang.dll/Hanks.Library.Bang/DotsView?code=true