How do I get android paint(stylus) size?
关于上述问题。
我可以通过MotionEvent.getSize()
创建一个仅限手写笔的策略public boolean onTouchEvent(MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_MOVE) {
float paintsize = event.getSize();
Log.i(TAG,String.valueOf(paintsize));
if (paintsize == 0.02) {
canvas.drawLine(mov_x, mov_y, event.getX(), event.getY(), paint);
invalidate();
}
}
......
return true;
}
但这导致我的手无法画任何东西。
所以,我想设计一个手写笔优先策略,例如,当我的手和手写笔同时触摸屏幕时,系统应该只显示手写笔的路径;当我的手触摸屏幕时,系统像往常一样显示我的手的路径。
在我看来,手写笔不能向设备广播任何消息,所以我只有一个值可以检测:尺寸
我的手的大小在0.06到0.8999之间......手写笔的大小是0.02
如何处理触摸事件的优先级? 我不知道这种情况。
答案 0 :(得分:1)
?event.getToolType()
已在API级别14中添加
public int getToolType (int pointerIndex)
获取给定指针索引的指针的工具类型。工具类型指示用于进行接触的工具类型,例如手指或手写笔。
int toolType = event.getToolType(0);
if(toolType == event.TOOL_TYPE_FINGER){
ToastUtil.show(CanvasActivity.this,"It is finger");
return true;
}else if(toolType == event.TOOL_TYPE_MOUSE){
ToastUtil.show(CanvasActivity.this,"It is mouse");
return true;
}else if(toolType == event.TOOL_TYPE_UNKNOWN){
ToastUtil.show(CanvasActivity.this,"Unknown");
return true;
}else if(toolType == event.TOOL_TYPE_STYLUS){
ToastUtil.show(CanvasActivity.this,"It is stylus");
return true;
}
答案 1 :(得分:0)
因为我只能通过它的大小检测我的手写笔,所以检索它的PointerID是唯一的方法。
根据https://developer.android.com/reference/android/view/MotionEvent.html#getPointerId%28int%29
getPointerID:返回与此事件中的特定指针数据索引关联的指针标识符。标识符告诉您与数据关联的实际指针编号,说明自当前手势开始以来单个指针上下移动。
这是一个例子。
@Override
public boolean onTouchEvent(MotionEvent event){
float inputsize = event.getSize();
int index = event.getActionIndex();
int inputid = event.getPointerID(index);
boolean isStylus = false;
int stylusid = -1;
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
if(inputsize==0.02 && isStylus==false){
isStylus = true;
stylusid = inputid;
}
if((isStylus==true) && (inputid==stylusid)){
mov_x = event.getX();
mov_y = event.getY();
//If the new input event is stylus, then move to new coordinate.
mPath.moveTo(mov_x,mov_y);
}
......
break;
case MotionEvent.ACTION_MOVE:
......
}
}
虽然这种方式并不完美,但仍然有效。