【问题标题】:How do I implement scribble view in OpenGL in android?如何在 android 的 OpenGL 中实现涂鸦视图?
【发布时间】:2011-12-30 08:41:54
【问题描述】:
我有一个安卓应用程序。我想使用 OpenGL 来渲染我的图像并添加效果。我还想要一个单独的视图,用户可以在其中涂鸦。我希望视图的背景颜色是透明的。我还想在放大或缩小图像时放大和缩小。我想我应该使用glScalef() 控制放大和缩小。但是当我缩放(放大)视图时,我还需要增加笔的宽度。我想用openGL写这个视图。我是 android 和 openGL 的新手。请用你的想法指导我。
【问题讨论】:
标签:
android
opengl-es
handwriting
【解决方案1】:
我尝试了一种不同的方法来实现我在 glSurfaceView 上涂鸦的功能,同时能够放大和缩小。我已经在普通的 android 提供的画布上完成了所有的涂鸦。在后台我有一个 GLSurfaceView。最重要的是我有一个涂鸦视图(http://www.java2s.com/Code/Android/2D-Graphics/Classforthescribblemopad.htm)。我已将 ScribbleView 的背景设置为透明。当我完成涂鸦时,我使用按钮的 onClickListener 关闭涂鸦(当涂鸦关闭时,用户可以放大和缩小)。我可以使用 ScaleGestureDetector.SimpleOnScaleGestureListener 放大或缩小。在其onScale() 中,我使用的是mScaleFactor=(mScaleFactor * detector.getScaleFactor());,其中 mScaleFactor 被初始化为 1f,mScaleFactor 用于跟踪当前的 ScalingFactor。对于 glSurface 的缩放,我使用 glScalef(mScaleFactor,mScaleFactor),对于画布缩放,我使用 canvas.scale(mScaleFactor,mScaleFactor,getWidth()/2,getHeight()/2)。我已将枢轴点设置为视图的中间,因为画布的坐标使其原点位于左上角。
在我放大或缩小画布之后,为了正确涂鸦,我在 Scribble 视图的 onTouchEvent(Event event) 中完成了以下映射
event.getX() and event.getY(). <br>
x=(event.getX()- getWidth() / 2) / getmScaleFactor() + getWidth() / 2;<br>
y=(event.getX()- getWidth() / 2) / getmScaleFactor() + getWidth() / 2;<br>
<br>
现在,当我在放大或缩小的画布上涂鸦时,我可以在正确触摸屏幕的位置涂鸦。
我希望我能够让大家对我的方法有所了解。
谢谢克里希纳。