PointerPredictor Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Обеспечивает поддержку создания коллекции объектов PointerPoint , которые прогнозируют наиболее вероятный путь текущего входного указателя.
public ref class PointerPredictor sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class PointerPredictor final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class PointerPredictor : System.IDisposable
Public NotInheritable Class PointerPredictor
Implements IDisposable
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере показано, как использовать объект PointerPredictor, получая входные данные для SwapChainPanel в фоновом потоке.
class PointerPredictionRenderer : IDisposable
{
private DispatcherQueueController _queuecontroller;
private InputPointerSource _inputPointerSource;
private PointerPredictor _pointerPredictor;
private List<Point> _actualPoints = new List<Point>();
private List<Point> _predictedPoints = new List<Point>();
private SwapChainPanel _panel;
public PointerPredictionRenderer(SwapChainPanel panel)
{
_panel = panel;
_panel.Loaded += SwapChainPanel_Loaded;
}
private void SwapChainPanel_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
_queuecontroller = DispatcherQueueController.CreateOnDedicatedThread();
_queuecontroller.DispatcherQueue.TryEnqueue(DispatcherQueuePriority.High,
() =>
{
// Set up the pointer input source to receive pen input for the swap chain panel.
_inputPointerSource = _panel.CreateCoreIndependentInputSource(InputPointerSourceDeviceKinds.Pen);
_inputPointerSource.PointerPressed += InputPointerSource_PointerPressed;
_inputPointerSource.PointerMoved += InputPointerSource_PointerMoved;
_inputPointerSource.PointerReleased += InputPointerSource_PointerReleased;
// Create the pointer predictor for the input pointer source. By default it will be configured
// to predict points 15ms into the future
_pointerPredictor = PointerPredictor.CreateForInputPointerSource(_inputPointerSource);
});
}
~PointerPredictionRenderer()
{
Dispose();
}
public void Dispose()
{
if (_pointerPredictor != null)
{
_pointerPredictor.Dispose();
_pointerPredictor = null;
}
_inputPointerSource.PointerPressed -= InputPointerSource_PointerPressed;
_inputPointerSource.PointerMoved -= InputPointerSource_PointerMoved;
_inputPointerSource.PointerReleased -= InputPointerSource_PointerReleased;
_inputPointerSource = null;
_queuecontroller = null;
}
private void InputPointerSource_PointerPressed(InputPointerSource sender, PointerEventArgs args)
{
// Store the new point in contact.
_actualPoints.Add(args.CurrentPoint.Position);
}
private void InputPointerSource_PointerMoved(InputPointerSource sender, PointerEventArgs args)
{
// Only render ink and query for predicted points when the pointer is in contact.
// There are no predicted points if the pointer is not in contact.
if (args.CurrentPoint.IsInContact)
{
// Store new points received in this event.
var intermediatePoints = args.GetIntermediatePoints();
foreach (var point in intermediatePoints)
{
_actualPoints.Add(point.Position);
}
// Query for the predicted points from the predictor.
var predictedPoints = _pointerPredictor.GetPredictedPoints(args.CurrentPoint);
if (predictedPoints != null)
{
foreach (var predictedPoint in predictedPoints)
{
_predictedPoints.Add(predictedPoint.Position);
}
}
// Render the new ink stroke and the predicted ink stroke.
RenderInk();
}
}
private void InputPointerSource_PointerReleased(InputPointerSource sender, PointerEventArgs args)
{
// Clear the stored ink points and erase the predicted ink rendered for this stroke.
_actualPoints.Clear();
ClearPredictedInk();
_predictedPoints.Clear();
}
private void RenderInk()
{
// Render the ink strokes defined by _actualPoints and _predictedPoints.
throw new NotImplementedException();
}
private void ClearPredictedInk()
{
// Clear the ink stroke defined by _predictedPoints.
throw new NotImplementedException();
}
}
Комментарии
Этот объект обычно используется для уменьшения задержки отрисовки при вводе рукописного ввода. В некоторых случаях, когда пользователь рисует очень быстро, между кончиком пера и рукописным фрагментом может быть заметный разрыв.
Свойства
PredictionTime |
Получает или задает, насколько далеко в будущем от текущего времени объект PointerPredictor должен попытаться спрогнозировать входные данные указателя. |
Методы
Close() |
Закрывает pointerPredictor и освобождает системные ресурсы. |
CreateForInputPointerSource(InputPointerSource) |
Создает экземпляр pointerPredictor для указанного объекта InputPointerSource. |
Dispose() |
Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов. |
GetPredictedPoints(PointerPoint) |
Извлекает коллекцию прогнозируемых точек для указанного PointerPoint. |