0

私はアンドロイドアプリケーションを持っています。OpenGL を使用して画像をレンダリングし、効果を追加したいと考えています。また、ユーザーが落書きできる別のビューが必要です。ビューの背景色を透明にしたい。また、画像をズームインまたはズームアウトするときに、ズームインおよびズームアウトしたいと考えています。を使用してズームインとズームアウトを制御しようと考えていglScalef()ます。ただし、ビューをズーム (拡大) するときに、ペンの幅も大きくする必要があります。このビューをopenGLで書きたいです。私はアンドロイドとopenGLが初めてです。あなたのアイデアで私を導いてください。

4

1 に答える 1

0

glSurfaceView に落書きする機能を実装し、同時にズームインとズームアウトできるようにするために、別のアプローチを試みました。私は通常のアンドロイドが提供するキャンバスにすべての落書きをしました。バックグラウンドで GLSurfaceView を使用しています。その上に落書きビューがあります (http://www.java2s.com/Code/Android/2D-Graphics/Classforthescribblememopad.htm)。ScribbleView の背景を TRANSPARENT に設定しました。落書きが終わったら、ボタンの 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>

ズームインまたはズームアウトしたキャンバスに落書きをすると、画面に正しく触れた時点で落書きできるようになりました。
私のアプローチについて、皆さんに少しでも理解を深めていただければ幸いです。


ありがとうクリシュナ。

于 2012-01-03T11:27:51.310 に答える