- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试在 UWP 应用程序中编写 Android 效果(波纹)代码。因此,我在网格内(在我的用户控件中)创建了一个 EllipseGeometry,但是当我的 ellipseGeometry 的 RadiusX 和 RadiusY 播放它们的动画时,我的 EllipseGeometry 会超出我的网格...我试图用可见区域限制路径并将其剪裁到路径上,但没有成功。
这是我的 XAML 代码:
<UserControl
x:Class="UIComponents.POIButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UIComponents"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="100"
d:DesignWidth="650" Background="White">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Gray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<!--Animation Ellipse-->
<Grid x:Name="ellipseContainer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Grid.ColumnSpan="3">
<Path x:Name="path" Fill="Red" Stroke="Black" StrokeThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<Path.Data>
<EllipseGeometry x:Name="circleGeometry" Center="0,0" RadiusX="5" RadiusY="5" />
</Path.Data>
</Path>
</Grid>
<Rectangle x:Name="clickableRect" Grid.Column="0" Grid.ColumnSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" PointerPressed="clickableRect_PointerPressed" Fill="Transparent" Tapped="clickableRect_Tapped"/>
</Grid>
<UserControl.Resources>
<Storyboard x:Name="RipplePath">
<DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetProperty="RadiusX" Storyboard.TargetName="circleGeometry">
<EasingDoubleKeyFrame KeyTime="0" Value="5"/>
<EasingDoubleKeyFrame KeyTime="0:0:10" Value="200"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetProperty="RadiusY" Storyboard.TargetName="circleGeometry">
<EasingDoubleKeyFrame KeyTime="0" Value="5"/>
<EasingDoubleKeyFrame KeyTime="0:0:10" Value="200"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
这是我的 Cs 代码:
private void clickableRect_Tapped(object sender, TappedRoutedEventArgs e)
{
Point touchPosition = e.GetPosition(ellipseContainer);
//RectangleGeometry visibleArea = new RectangleGeometry();
//visibleArea.Rect = new Rect(0, 0, 650, 100);
//path.Clip = visibleArea;
Storyboard animation = this.FindName("RipplePath") as Storyboard;
animation.Begin();
}
这里,结果:
非常感谢您的帮助:)
============== 尝试 Justin XL 的解决方案:结果:
感谢贾斯汀的帮助,矩形几何似乎也动画化了:
但网格上没有任何东西。
Xaml 代码是:
<UserControl
x:Class="UIComponents.POIButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UIComponents"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="100"
d:DesignWidth="650" Background="White">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Gray">
<Grid.Clip>
<RectangleGeometry Rect="0,0,650,100" />
</Grid.Clip> ...
CS 代码是:
public POIButton()
{
this.InitializeComponent();
var visual = ElementCompositionPreview.GetElementVisual(this);
visual.Clip = visual.Compositor.CreateInsetClip();
}
================ XAML 结果:
此 XAML 代码未产生正确的效果:
<UserControl
x:Class="UIComponents.POIButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UIComponents"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Height="100"
Width="650" Background="White">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Gray">
<Grid.Clip>
<RectangleGeometry Rect="0,0,650,100" />
</Grid.Clip>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<!--Animation Ellipse-->
<Grid x:Name="ellipseContainer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Grid.ColumnSpan="3">
<Path x:Name="path" Fill="Red" Stroke="Black" StrokeThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<Path.Data>
<EllipseGeometry x:Name="circleGeometry" Center="0,0" RadiusX="5" RadiusY="5" />
</Path.Data>
</Path>
</Grid>...
但 CS 代码工作正常(在 XAML 代码中注释 RectangleGeometry 行):
this.InitializeComponent();
var visual = ElementCompositionPreview.GetElementVisual(this);
visual.Clip = visual.Compositor.CreateInsetClip();
产生这个:
感谢@Justin XL 的帮助:)
最佳答案
您只需要剪裁控件使其不超出其边界即可。这可以通过使用
<Grid x:Name="Root" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Gray">
<Grid.Clip>
<RectangleGeometry Rect="0,0,200,80" />
</Grid.Clip>
在您的 XAML 中(200
是宽度,80
是高度),或者
public POIButton()
{
InitializeComponent();
var visual = ElementCompositionPreview.GetElementVisual(this);
visual.Clip = visual.Compositor.CreateInsetClip();
}
使用新的 Composition API 进行代码隐藏。请注意,使用 XAML 方法时,如果控件的大小发生变化,您需要通过绑定(bind)或代码隐藏手动更新宽度和高度,而使用 Composition 则不需要。
此外,我注意到您使用了在 UI 线程上运行的路径动画(例如 EnableDependentAnimation
)。这可以替换为带有 ScaleTransform
动画的 Ellipse
,这通常是推荐的方法,因为它的性能要好得多。
XamlLight
的“涟漪”效果由于您正在为 UWP 进行开发,因此了解该平台可以做什么以及实现类似效果的 UWP 方式非常重要,但仍然尊重其自身的 Fluent Design System。
我在新的 XamlLight
的帮助下创建了如下所示的 FluentButton
控件15063
中引入的类。您会注意到灯光跟随您的鼠标光标,并在单击/点击时产生涟漪。
第二部分由自定义的 XamlLight
完成,我称之为 RippleXamlLight
,这就是它的实现方式 -
首先,创建一个继承自 XamlLight
的类。
public class RippleXamlLight : XamlLight
然后,在其 OnConnected
覆盖方法中,创建一个 SpotLight
实例和一个 Vector3
动画,用于为光的 偏移量
。它还将负责订阅指针事件,例如 PointerPressed
。
protected override void OnConnected(UIElement newElement)
{
_compositor = Window.Current.Compositor;
var spotLight = CreateSpotLight();
CompositionLight = spotLight;
_lightRippleOffsetAnimation = CreateLightRippleOffsetAnimation();
SubscribeToPointerEvents();
AddTargetElement(GetId(), newElement);
...
}
}
最后,只要按下控件就开始播放动画。 Offset
值由指针位置和根据控件大小计算的 _rippleOffsetZ
提供。
private void OnPointerPressed(object sender, PointerRoutedEventArgs e) =>
StartLightRippleOffsetAnimation(e.GetCurrentPoint((UIElement)sender).Position.ToVector2());
private void StartLightRippleOffsetAnimation(Vector2 position)
{
var startingPoisition = new Vector3(position, 0.0f);
_lightRippleOffsetAnimation?.InsertKeyFrame(0.0f, startingPoisition);
_lightRippleOffsetAnimation?.InsertKeyFrame(1.0f, new Vector3(position.X, position.Y, _rippleOffsetZ));
CompositionLight?.StartAnimation("Offset", _lightRippleOffsetAnimation);
}
如果我解释得不够清楚,这里是 full source供你引用。 :)
关于c# - UWP xaml ripple Effect(安卓效果)动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234478/
我正在尝试设计以下由 Fulladers 制成的 Ripple Carry Adder。到目前为止,我尝试了很多,但我正在为 Chisel 语法而苦苦挣扎。有人可以帮我指出我做错了什么吗?这是我的代码
我正在寻找如下所示的效果 我无法命名效果,因此无法在线查找任何资源。它看起来像一个涟漪,但当我搜索它时,我发现的只是按钮等上的涟漪。 有人有关于该主题的任何资源吗? 谢谢 最佳答案 您的搜索无效,因为
Apach cordova 的新手,试图制作一个简单的应用程序。这是使用 Ripple(用于 phonegab/cordova 仿真)在 google chrome 中查看的结果 这是我点击按钮时的结
我目前正在离散数学课上做一个项目,我们必须编码: 1.) RippleCarryAdder:它是一个用于添加固定大小的 5 位整数的电路。参数: x_array: operand 1, i.e. an
我正在尝试为我的应用程序中的卡片创建简单的涟漪效果。它工作得很好,但它也在响应容器外的鼠标事件: 代码如下所示: ... ...
我正在尝试模仿这种效果: 但我做不到,我一直在这样做: 最佳答案 您不需要任何自定义背景,只需使用像这样的 Im
用于检查当前网络连接的标准 PhoneGap API(见下文)似乎没有更新它在 Ripple Emulator 中的结果。当我更改连接类型并执行 checkConnection() 时,它会返回第一次
有没有办法检测我的应用程序当前正在 Ripple Emulator 上运行,而不是在真实设备上运行?我希望一些解决方法代码仅在模拟器上运行。 最佳答案 您可以检查涟漪实例是否可用:if(typeof
我使用 Visual Studio 2015 RC 创建了一个 Ionic (Apache Cordova) 应用程序。我在它自己的解决方案文件中创建了它,我可以使用 Ripple 运行它。 现在我想
我想创建一个带有波纹动画的类似按钮的组件,它看起来像这样: Button 在过去,这工作正常,因为当我点击这个自定义元素时,我实际上点击了 material-ripple 并且点击事件冒泡到宿主元素
如何将textView的一部分背景设置为具有波纹效果的可绘制对象? spannableString.setSpan( BackgroundColorSpan(ANYCOLOR)
我正在尝试在 View 中的触摸事件上创建 android L 预览“波纹”效果。如果我使用此代码作为按钮工作: public class MyButton extends Button {
https://github.com/sirxemic/jquery.ripples/ 我玩过这个 ripples jQuery 插件,虽然我只是个新手,但我似乎找不到在特定区域(例如 a 或其他东西
我正在尝试编写一个函数,该函数将接受数组长度,并返回“波纹输出”数组。 例如: rippleOut(3) 将返回 [0,1,0] rippleOut(6) 将返回 [0,1,2,2,1,0] 这就是我
我正在设计我的自定义搜索栏。我想让拇指透明,但它仍然有涟漪效应。有人有什么建议吗? 最佳答案 设置 android:background="@null"这应该会关闭搜索栏的涟漪效应。 关于Androi
我正在使用 MaterializeCSS ( http://materializecss.com/ ) 构建我的网站 我想知道如何手动触发特定控件的 Wave/Ripple 效果,例如: “触发特定按
我现在正尝试使用下面的代码制作 Ripple Animation 通过这段代码我每次都在相同的位置获得动画 CATransition *animation = [CATransition animat
我正在尝试为 Android TV 和 Amazon FireTV 应用程序(通过 DPAD 导航)中的按钮实现涟漪效果背景。我正在使用 AppCompat,但由于默认按钮样式都使用波纹,我现在使用没
如何添加 mat-ripple指令到我创建的自定义指令的主机元素?关键是要有 mat-ripple自动添加到我添加的任何元素 my-custom-directive也是。 所以如果我添加 Button
我正在使用 jquerymobile/phonegap/cordova(2.0) 开发移动应用程序。我尝试从流 (xml) 下载一些文件并将它们存储在本地。此行为仅出现在我用于调试的 chrome 浏
我是一名优秀的程序员,十分优秀!