【发布时间】:2015-08-11 18:34:40
【问题描述】:
我正在制作一个应用程序,人们将能够在 WebView 中放置圆圈。所以我的 算法是:
- 检测长按
- 在 WebView 上获取手指坐标
- 在 Canvas 中画圆
所以一开始我可以编写一个在LongClick 上画一个圆圈的代码,唯一的问题是当我改变比例(缩放)时,圆圈从它的位置移动了。在 karaokyo 回答的帮助下,我已经解决了这个移动问题)添加scale float Canvas.drawCircle(x * scale, y * scale, 10, p),其中scale = getScale()。
不幸的是,出现了新问题 - 当我制作圆圈时,它绘制了错误的坐标。这张图片显示了我的意思:
public DrawWebView (Context context, AttributeSet attrs)
{
super (context, attrs);
wv1 = (DrawWebView) findViewById(R.id.webView1);
wv1.loadUrl("file://" + Environment.getExternalStorageDirectory() + "/Pictures/ScolDetectPics/boxes.jpg");
wv1.getSettings().setBuiltInZoomControls(true);
wv1.getSettings().setDisplayZoomControls(false);
wv1.getSettings().setSupportZoom(true);
wv1.getSettings().setUseWideViewPort(true);
wv1.getSettings().setLoadWithOverviewMode(true);
wv1.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
mContext = context;
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
draw = true;
this.invalidate();
break;
case MotionEvent.ACTION_MOVE:
this.invalidate();
break;
case MotionEvent.ACTION_UP:
this.invalidate();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw (canvas);
text = MainActivity.text;
zoomPos = MainActivity.zoomPos;
Paint p = new Paint();
p.setColor (Color.RED);
if(initScale == 0){
initScale = getScale();
}
float scale = getScale();
float refScale = scale/initScale;
if(MainActivity.drawConfirm){
zoomPos = MainActivity.zoomPos;
draw1 = true;
}
canvas.drawCircle(330 * refScale, 618 * refScale, 10, p);
//text.setText(Float.toString(scale));
text.setText(Float.toString(initScale));
canvas.drawCircle(330, 618, 10, p);
if(draw1){
canvas.drawCircle(zoomPos.x * refScale, zoomPos.y * refScale, 10, p);
}
}
}
此外,如果我双击多次圆圈(两者)出现在错误的位置,点击时移动到正确的位置。
如果您知道如何执行此操作或知道一个好的教程 - 将不胜感激。
[更新卡拉京的答案]
我已经复制了你的代码,但是circle仍然在错误的地方,实际上initialScale的值是2.0。在这张图片上可以清楚地看到。
1. 有移动问题的圆,但坐标正确。
2. 圆无移动问题,坐标乘以scale = getScale。
3.圆无移动问题,坐标乘以scale/initScale
【问题讨论】:
-
我认为你最好使用 javascript 绘制圆圈。
标签: javascript android canvas webview android-webview