C# Xamarin.form中的可缩放旋转视图
我使用旋转视图来显示许多图像,在滑动时可以更改。我遇到的问题是这些图像无法缩放。有没有办法在旋转木马视图中启用缩放?谢谢。好的,第一个旋转木马视图不是你想要缩放的gud(实际情况下) 客户需要银河系以外的东西,所以你可以用一些逻辑来解决问题 第一条路: 在共享的Xamarin.forms解决方案中创建类名ZoomImage,并在其中添加此代码C# Xamarin.form中的可缩放旋转视图,c#,xamarin.forms,carousel,zooming,C#,Xamarin.forms,Carousel,Zooming,我使用旋转视图来显示许多图像,在滑动时可以更改。我遇到的问题是这些图像无法缩放。有没有办法在旋转木马视图中启用缩放?谢谢。好的,第一个旋转木马视图不是你想要缩放的gud(实际情况下) 客户需要银河系以外的东西,所以你可以用一些逻辑来解决问题 第一条路: 在共享的Xamarin.forms解决方案中创建类名ZoomImage,并在其中添加此代码 public class ZoomImage : Image { private const double MIN_SCALE = 1; priv
public class ZoomImage : Image {
private const double MIN_SCALE = 1;
private const double MAX_SCALE = 4;
private const double OVERSHOOT = 0.15;
private double StartScale;
private double LastX, LastY;
public ZoomImage() {
var pinch = new PinchGestureRecognizer();
pinch.PinchUpdated += OnPinchUpdated;
GestureRecognizers.Add(pinch);
var pan = new PanGestureRecognizer();
pan.PanUpdated += OnPanUpdated;
GestureRecognizers.Add(pan);
var tap = new TapGestureRecognizer { NumberOfTapsRequired = 2 };
tap.Tapped += OnTapped;
GestureRecognizers.Add(tap);
Scale = MIN_SCALE;
TranslationX = TranslationY = 0;
AnchorX = AnchorY = 0;
}
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint) {
Scale = MIN_SCALE;
TranslationX = TranslationY = 0;
AnchorX = AnchorY = 0;
return base.OnMeasure(widthConstraint, heightConstraint);
}
private void OnTapped(object sender, EventArgs e) {
if (Scale > MIN_SCALE) {
this.ScaleTo(MIN_SCALE, 250, Easing.CubicInOut);
this.TranslateTo(0, 0, 250, Easing.CubicInOut);
}
else {
AnchorX = AnchorY = 0.5; //TODO tapped position
this.ScaleTo(MAX_SCALE, 250, Easing.CubicInOut);
}
}
private void OnPanUpdated(object sender, PanUpdatedEventArgs e) {
if (Scale > MIN_SCALE)
switch (e.StatusType) {
case GestureStatus.Started:
LastX = TranslationX;
LastY = TranslationY;
break;
case GestureStatus.Running:
TranslationX = Clamp(LastX + e.TotalX * Scale, -Width / 2, Width / 2);
TranslationY = Clamp(LastY + e.TotalY * Scale, -Height / 2, Height / 2);
break;
}
}
private void OnPinchUpdated(object sender, PinchGestureUpdatedEventArgs e) {
switch (e.Status) {
case GestureStatus.Started:
StartScale = Scale;
AnchorX = e.ScaleOrigin.X;
AnchorY = e.ScaleOrigin.Y;
break;
case GestureStatus.Running:
double current = Scale + (e.Scale - 1) * StartScale;
Scale = Clamp(current, MIN_SCALE * (1 - OVERSHOOT), MAX_SCALE * (1 + OVERSHOOT));
break;
case GestureStatus.Completed:
if (Scale > MAX_SCALE)
this.ScaleTo(MAX_SCALE, 250, Easing.SpringOut);
else if (Scale < MIN_SCALE)
this.ScaleTo(MIN_SCALE, 250, Easing.SpringOut);
break;
}
}
private T Clamp<T>(T value, T minimum, T maximum) where T : IComparable {
if (value.CompareTo(minimum) < 0)
return minimum;
else if (value.CompareTo(maximum) > 0)
return maximum;
else
return value;
}
}
这就是图像缩放的方式
或者第二种方法是
添加在旋转木马视图上点击的项目,并在命令参数中传递图片源,打开包含该图片的新页面,并在其中应用缩放
我用这种逻辑来解决我的问题
希望这有帮助:)这可以通过使用 Alexanman/旋转木马视图,用于旋转木马视图。 并根据表单样本向carousal view中使用的图像添加Xamarin表单夹手势识别器
那么,到目前为止您做了什么?实现了旋转木马视图。这是预期的行为,在股票转盘视图中没有缩放。或者你实现了任何使用缩放的功能吗?@PaulKertscher我还没有实现任何用于缩放的功能。我想知道我的功能选项是什么?这里我有一个问题,我使用旋转视图来显示许多图像,当我在滑动另一个图像(背景图像显示)后缩放一个图像时,请给我解决此问题的解决方案。我想在旋转视图中位置更改时缩小。我正在创建一个类名ZoomImage。类似viewcell的内部示例。你知道吗?我仍然面临这个问题
<cv:CarouselView x:Name="itemPictureGallery" Grid.Column="0" Grid.Row="0">
<cv:CarouselView.ItemTemplate>
<DataTemplate>
<local:image source="YOUR_PIC_SOURCE" />
</DataTemplate>
</cv:CarouselView.ItemTemplate>
</cv:CarouselView>
xmlns:local="clr-namespace:YOUR_APP_NAME"