問題タブ [ondraw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 変更時にAndroidビューを更新するにはどうすればよいですか?
ビューには、呼び出されたときに描画される図形の一部を変更するメソッドがいくつかあります。Javaでは、コンポーネントが更新されていることを確認するために、を呼び出しますrepaint()
。ビューが正しく更新されていることを確認するものはありますか?
invalidate()
メソッドを呼び出すと最新の状態に保たれるので、描画される図形を変更するonDraw()
ようなものをメソッドに含める必要がないことをどこかで読んだことがあります。repaint()
これは正しいですか、それとも私がしなければならないことが他にありますか?
編集
例を追加するために、ビューで呼び出すメソッドは次のとおりです。
android - AndroidはUIスレッドが無効になるのを待ちます
ペイントアプリでビューを再描画するのに問題があります。タッチが終了したら、touch_up()を呼び出してパスを作成し、invalidate()を呼び出してパスを描画し、storeView()を呼び出して現在のビューをスタックにプッシュします。ただし、ビューはまったく再描画されません(次のタッチまで、ひねくれた効果が得られます)。storeView()の呼び出しを削除すると、すぐに再描画されます。
ここから、問題がinvalidate()であることがすぐに発生するとは限らないことを理解し、それを待つために新しいスレッドまたはハンドラーを作成する必要があると思います。開発ページを読んだにもかかわらず、私はそれを実装する方法を完全には理解していません。
それは本当に私がする必要があることですか?ビューが再描画されるまでstoreView()を待機させるにはどうすればよいですか?私はこれとしばらく戦ってきました、答えは私の日を作るでしょう。ありがとう!
これが私が現在していることです。
Action_up:
Touch_up:
storeView:
android - Opengl-es onTouchEvents の問題または描画の問題?
私は自分のアプリで opengl を使い始めたばかりで、うまくいきました =) しかし、ユーザー入力の方法を考え出そうとしているため、最近レンガの壁にぶつかりました。画面に触れた位置に正方形を画面に描く簡単なプロセスから始めることにしました。残念ながら、アプリは入力を登録していないようです。
これが私のコードです:
このアクティビティでアプリが開きます >>
これにより、フル スクリーンの SurfaceView が初期化されます。
次にレンダラー
ご覧のとおり、イベントの座標を取得して上部のフロートに設定する onTouchEvent があります。draw メソッドは、これらの座標を使用して正方形の位置を設定します。ここでの draw メソッドは、正方形を再描画するのに十分なほど更新されていないと思います。正方形の onTouch を更新するように draw メソッドを設定するにはどうすればよいですか? onTouch メソッド内から描画する正方形を設定しようとするだけでなく、次のように空白のままにしました。
これらは両方とも同じ結果を返します =( だから私は onTouchEvent を間違ってやっていますか? または、何らかの方法で描画メソッドを強制的に更新する必要がありますか? そして、どうすればこれを適切に実装できますか?
お時間をいただきありがとうございます
編集:
メソッドを Practice クラスに移動することで、onTouchEvent を登録するコードを取得することができました。
編集: いくつかの改良を行い、コードがある程度適切に機能するようになりましたが、目的の場所に正方形を再描画する代わりに、空白のクリアされた画面が表示されます。
ここに編集された練習があります
そして編集されたレンダラークラス
何か案は?スクエアコードはこちら
android - Android は、描画アプリに取り消しスタックを実装します
グラフィックスに慣れるために、Android SDK のサンプル Finger Paint アプリの作成を開始しました。最近、元に戻す/やり直しを実装しようとしていますが、試したすべての方法で障害に遭遇しました。これに関するいくつかのスレッドを見つけましたが、これらの問題を乗り越えたスレッドはありません。ここに私の主な2つの試験があります:
戦略 1:
パス (またはキャンバス) のスタックを保存し、元に戻すときに画面をクリアして、最後のパスを除く各パスを再描画します (または最新のキャンバスを元に戻します)。
ここでの問題はおそらく単純ですが、ビューに何も再描画させることができません。保存したパスを描画する (または保存したキャンバスを復元する) にはどうすればよいですか?
戦略 2:
タッチするたびに getDrawingCache() を使用してビットマップのスタックを保存します。元に戻すときは、最後のビットマップを元に戻します。
保存は runnable から post() を介して実行する必要があるため、onDraw() が終了した後に実行されます (post は、invalidate() の後にシステム メッセージ ラインに追加します)。問題は、実行可能な getDrawingCache() から実行すると、最初のバージョン以降の変更が表示されないように、常に最初のバージョンのペイントが返されることです。
getDrawingCache() が runnable から呼び出されたときに、ビューの現在の状態が表示されないのはなぜですか?
私はこれでしばらく戦ってきました。ありがとう。
android - android-custom-view クラスのサブクラスで onDraw メソッドはどのように機能しますか?
Android カスタム ビュー クラスのサブクラスで四角形を描画する問題に直面しています。スーパークラスのonDrawメソッドが機能するたびに、サブクラスのonDrawメソッドは実行されませんでした。スーパークラスは四角形を描画し、サブクラスはスーパークラスが描画した四角形内に 4 つの四角形を描画します。この問題を解決できません。助けてください。
これが私のサンプルコードです。
スーパークラス:
サブクラス:
XML
この問題に関して私を助けてください。うまくいけば、すぐに返事が来るでしょう。
android - androidキャンバス-複数の描画メソッドを使用できますか?
imageViewを拡張する独自のcanvasクラスを作成しました。私のonDraw()メソッドはユーザーのgps位置を引き出し、ユーザーが移動するたびにこのonDrawメソッドを呼び出し続けます。私の問題は、一度だけ描画する必要があるgpsトレイルも描画したいということです(ユーザーが移動したときに更新する必要はありません)。複数のonDrawメソッドを持つことは可能ですか、それとも1)ユーザーの場所と2)GPSトレイルを分離する方法はありますか?
私の理由は、ユーザーのgps位置が変わるたびにgpsルートを再描画してメモリを浪費したくないからです。もったいないです。
android - onDraw()から作成されたビットマップへの描画
カスタムビューをimageView内に配置できるように、ビットマップに描画しようとしています。onDrawメソッド内のコードは次のとおりです。
私の問題は、このようにビットマップを使用しようとすると、画面が真っ暗になることです。ビットマップに描画しようとしない場合、コードの残りの部分は表示どおりに機能することを知っています。
行をコメントアウトすると
その後、すべてが完全に機能するので、これが問題ですが、理由はわかりません。
どこが間違っているのですか?
android - Android Canvas onDraw メソッドで onClick イベントを作成する方法
私は周りを検索しましたが、まだ良い答えが見つかりません。imageView を拡張する独自のクラスを作成し、 onDraw() メソッドでキャンバスを使用して画像に円を描画しています。
私が今やりたいことは、画像のさまざまな場所にボタンを描画し、そのための onClick イベントを用意することです。そのため、ユーザーがボタンを押すと、新しいアクティビティが開きます..
これが私がこれまでに持っているものです..onClickメソッドが起動しないことを除いて、適切な場所にボタンを描画します
android - Android:キャンバスの翻訳後にクリック/タッチイベントが機能しない
複数のImageViewを含むFrameLayoutがあります。メインアクティビティでは、FrameLayoutと画像を指で移動(ドラッグ)するために、タッチイベントを記録します。
そのために、アクティビティタッチイベントハンドラーのinvalidate()によって呼び出されるframelayoutのonDraw内でcanvas.translate(x、y)を呼び出しています。
翻訳後、ImageViewをクリックできないことを除けば、すべてが魅力のように機能します。実際、各画像のクリックリスナーは、翻訳前の元の場所にあります。
翻訳後に各画像のレイアウトを手動で更新する必要があることを読みましたが、その方法は?移動値でマージンを変更すると、画像はさらに2倍になります...
私は本当にそれについての助けをいただければ幸いです。
乾杯。
これは、onDraw()メソッドでキャンバスを変換するframeLayoutです(ImageViewはメインアクティビティでそのFrameLayoutに追加されます)。
android - 無効化呼び出しを使用する必要がありますか?使用する場合はどこで使用しますか?
ビューを表示するアクティビティがあります。ビュー内に描画されるキャンバスがあり、次にキャンバスをドラッグ/ズームできるようにするオンタッチ機能があります。ただし、デバッグ時には、キャンバスの動きがないことを除いて、正しく機能しているように見えます。私はinvalidateと呼ぶ必要があると思います、これは正しいですか?もしそうなら、どこに呼べばいいですか?
あなたが私に与えることができるどんな助けにも感謝します。
Touch.java
およびビュー、GridView.java