我有一个安卓应用程序。我想使用 OpenGL 来渲染我的图像并添加效果。我还想要一个单独的视图,用户可以在其中涂鸦。我希望视图的背景颜色是透明的。我还想在放大或缩小图像时放大和缩小。我想我应该控制放大和缩小使用glScalef()
。但是当我缩放(放大)视图时,我还需要增加笔的宽度。我想用openGL写这个视图。我是 android 和 openGL 的新手。请用你的想法指导我。
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>
现在,当我在放大或缩小的画布上涂鸦时,我可以在正确触摸屏幕的位置涂鸦。
我希望我能够让大家对我的方法有所了解。
谢谢克里希纳。