合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
序号 | 步骤名称 | 目的 |
|---|---|---|
1 | 判断当前机器是否支持Pencil Engine报点预测,以免功能失效。 | |
2 | 设置当前手写View上下文中LCD的刷新率。 | |
3 | 在onTouchEvent处理中,针对ACTION_MOVE和ACTION_UP消息,在合适时机调用相应接口获取预测点信息。 |
无
- boolean isSupport = HwStrokeEstimate.isFeatureEnable();
- Log.d(TAG, "isSupportEstimate:" + isSupport);
- @Override
- public void onVisibilityChanged(View changeView, int visibility) {
- if (visibility == View.VISIBLE && mActivity != null && mActivity.getWindowManager() != null) {
- Display display = mActivity.getWindowManager().getDefaultDisplay();
- float refreshRate = display.getRefreshRate();
- HwStrokeEstimate.setRefreshRate(refreshRate);
- Log.d(TAG, "estimate, setRefreshRate:" + String.valueOf(refreshRate));
- }
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- float eventX = event.getX();
- float eventY = event.getY();
- float pressure = event.getPressure();
- switch (event.getActionMasked()) {
- case MotionEvent.ACTION_DOWN:
- break;
- case MotionEvent.ACTION_MOVE:
- onActionMove(event, eventX, eventY, pressure);
- break;
- case MotionEvent.ACTION_UP:mEventQueue.clear();
- break;
- default:break;
- }
-
- return true;
- }
-
- private void onActionMove(MotionEvent event, float x, float y, float p) {
- float predictX = x;
- float predictY = y;
- long realTime = 0L;
- long predictTime = 0L;
- long ts0 = System.nanoTime();
- long ts2 = 0L;
- long ts3 = 0L;
- int cnt = event.getHistorySize();
- if (cnt > 0) {
- mLstEvents.clear();
- for (int i = 0; i < cnt; i++) {
- /** 将真实的报点添加到队列中*/
- HwMotionEventInfo hwEvent = new HwMotionEventInfo(event.getHistoricalX(i),
- event.getHistoricalY(i), event.getHistoricalPressure(i),
- event.getHistoricalAxisValue(MotionEvent.AXIS_TILT, i),
- event.getHistoricalEventTime(i));
- mLstEvents.add(hwEvent);
- realTime = event.getHistoricalEventTime(i);
- }
- mEventQueue.fill(mLstEvents);
-
- mLstEvents.clear();
- ts2 = System.nanoTime();
- /** 使用预测算法进行预测,将预测的点加入到队列中*/
- int ret = HwStrokeEstimate.getEstimateEvent(mEventQueue.getQueue(), mLstEvents);
- ts3 = System.nanoTime();
- if ((ret == 0) && (mLstEvents.size() > 0)) {
- /** 取出预测点中的最后一个点的坐标及其时间戳*/
- HwMotionEventInfo lastPredictEvent = mLstEvents.get(mLstEvents.size() - 1);
- predictX = lastPredictEvent.getX();
- predictY = lastPredictEvent.getY();
- predictTime = lastPredictEvent.getEventTime();
- Log.i(TAG, "predictX: " + predictX + ", predictY: " + predictY + ", predictTime: " + predictTime);
- }
- }
- long ts1 = System.nanoTime();
- /** 计算每一次的预测时间*/
- long predictPeriod = predictTime > 0 ? predictTime - realTime : 0L;
- Log.d(TAG, "total cost: " + (ts1 - ts0) + ", estimate cost:" + (ts3 - ts2) + ", predict count:" + mLstEvents.size() + ", predict period:" + predictPeriod + ", dx:" + (predictX - x) + ", dy:"
在实现的报点预测应用中,在日志中查看到有预测后的报点打印出来,可以绘制出该预测点从而提升跟手性。