android - Androidでは、ImageViewに子ビューを追加できますか?

android imageview android-imageview

ImageViewを含むさまざまなコンポーネントを含むScrollViewを含むレイアウトがあります。 TouchListenerをImageViewに追加でき、イベントに対して取得したx、y値がImageViewのコーナーからオフセットされていることがわかりました(パディングを含む)。したがって、ScrollViewの状態を気にすることなく、タッチイベントを簡単に処理できます。

問題は、ImageViewの上部にビューを追加して、特定の場所でタッチしたときにImageViewに視覚的な変更を加える方法が表示されないことです。

具体的には、タップしたときに強調表示したいさまざまなボックスが画像にあります。アクティビティにビューを追加できますが、適切な場所に表示するためには、ScrollViewの状態を考慮する必要があります。

これに取り組む最善の方法は何ですか? ImageViewの新しいバージョンを派生させて、drawメソッドをオーバーロードし、それを何らかの方法で使用できますか? (xmlでそれをどのように指定するかわからない、おそらくアクティビティのonCreateで設定する必要があります)
答え
あなたが提案したようにImageViewのonDrawメソッドをオーバーライドし、ImageViewの上にものを描くことができるはずです。 onDrawメソッドは、描画可能なCanvasを提供します。 XMLでは、「ImageView」の代わりに、作成した新しいクラスの名前を使用できます(ImageViewによって提供されるパラメーターに加えてパラメーターを追加する場合を除き、これは非常に簡単です)。

<your.new.awesome.class.with.the.full.namespace
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/awesome_image_view"
    />



問題は、ImageViewの上部にビューを追加して、特定の場所でタッチしたときにImageViewに視覚的な変更を加える方法が表示されないことです。


作業できる別のビューを使用するほうが快適なようです。これを行うには、ImageViewをFrameLayoutでカプセル化し、そのImageViewの兄弟として任意の種類の別のビューを追加します。このビューは、ImageViewの後にFrameLayoutで言及されている場合、ImageViewの上に描画されます。このソリューションは最も効率的なものではないかもしれませんが、それがあなたを始めるかもしれません。 ImageViewのonDrawメソッドをオーバーライドすることは、間違いなく最良のオプションです。
関連記事

java - 断片的にキーが押されたことを検出できますか

android - オートコンプリートテキストビューを空に保つ方法(入力する準備ができています)?

java - Androidの一意のID [重複]

android - ギャラリーからアプリのフォルダーを削除する方法

android - Androidのリストビューに入力されない

android - 非常に基本的な迷路のようなアルゴリズムの提案が必要

android - Androidでtesseract-ocrを使用してOcr名刺スキャナーのコンセプトを手伝ってくれる人はいますか?

android - Androidですべてのユーザーイベントを監視する

android - GoogleマップstartActivityForResult

android - エミュレータのテーマを変更しますか?