我正在开发简单的图形应用程序,我想知道在触摸帆布时是否可以添加可见的指针?我的意思是类似于PC上的鼠标指示器。这样做的原因是 - 当使用橡皮擦时,当您的触摸确切注册到触摸时不可见,并且使用指针会有所帮助(尤其是在使用指示时,因为笔非常精确)。我尝试了其他类似的主题,但没有一个回答这个问题。
从此pos中获取: 如何通过编程启用"显示触摸"选项Android?
•启用显示触摸:
Settings.System.putInt(context.getContentResolver(),
"show_touches", 1);
•禁用显示触摸:
Settings.System.putInt(context.getContentResolver(),
"show_touches", 0);
记住将Android.permission.write_settings添加到您的清单中。
编辑:
这是一个实现View.OntouchListener并定义多个绘制模式的drawview.java。但是它缺少指标。
在setListener内部的主要活动中,用于绘图视图您覆盖onstartDrawing方法:在这里您可以决定是否显示指示器以及如何根据DrawView的当前模式(Pen,Eraser等)以及其他接口方法移动来样式指示器如果可见,并在绘图结束时将其隐藏。检查代码:
mDrawView.setOnDrawViewListener(new DrawView.OnDrawViewListener() {
@Override public void onStartDrawing() {
canUndoRedo();
// decide whether or not to show an
// indicator and style it depending on
// mDrawView's attributes and current drawing mode
setIndicator(mDrawView.getDrawingMode(),mDrawView.getDrawWidth());
}
@Override
public void onMove(MotionEvent motionEvent) {
if(isIndicatorVisible){
indicatorView.animate()
.x(motionEvent.getX())
.y(motionEvent.getY())
.setDuration(0)
.start();
}
}
@Override public void onEndDrawing() {
canUndoRedo();
//hide indicator here
if (isIndicatorVisible){
indicatorView.setVisibility(View.GONE);
isIndicatorVisible = false;
}
}
这是我添加到drawview.java的编辑:
定义的新接口方法无效(MotionEvent MotionEvent)
public interface OnDrawViewListener {
void onStartDrawing();
void onEndDrawing();
void onClearDrawing();
void onRequestText();
void onMove(MotionEvent motionEvent); // added this method
}
称为内部的新方法:
case MotionEvent.ACTION_MOVE:
onDrawViewListener.onMove(motionEvent); // added this line
mDrawMoveHistory.get(mDrawMoveHistory.size() - 1).setEndX(motionEvent.getX()).setEndY(motionEvent.getY());
if (mDrawingTool == DrawingTool.PEN || mDrawingMode == DrawingMode.ERASER) {
mDrawMoveHistory.get(mDrawMoveHistory.size() - 1).getDrawingPathList()
.get(mDrawMoveHistory.get(mDrawMoveHistory.size() - 1).getDrawingPathList().size() - 1)
.lineTo(motionEvent.getX(), motionEvent.getY());
}
invalidate();
break;
以下是setIndicator方法:
private void setIndicator(DrawingMode drawingMode, int drawWidth) {
if (drawingMode == DrawingMode.ERASER){
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(drawWidth, drawWidth);
indicatorView.setLayoutParams(params);
GradientDrawable border = new GradientDrawable();
border.setStroke(1, 0xFF000000); //black border with full opacity
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
indicatorView.setBackgroundDrawable(border);
} else {
indicatorView.setBackground(border);
}
indicatorView.setVisibility(View.VISIBLE);
isIndicatorVisible = true;
}
}