2

私のAndroidアプリには、実際に撮影されたデバイスを表す大きな画像があります。今、私は知りたいのですが、次のことを行うための最良の方法は何ですか?

  • 一部の特定の画像セクターをクリック可能としてマークする
  • クリックイベントのビジュアルプレビュー(通常のAndroidボタンのように)

http://catchthecows.com/?p=113の「imagemap」のようなソリューションのようなものについて考えました 。ただし、クリックされたセクションは強調表示されません(私にとって必要です)。ハイライト効果を処理する「n」個の異なる画像を作成することは不可能であるか、非常に複雑です(たとえば、セクション1をクリックしてハイライトし、セクション2をクリックしてハイライトします...)。

どんな提案も素晴らしいでしょう。

どうもありがとう。

ところで:私の画像は次のようになります(赤いセクションはクリック可能である必要があります)。 ここに画像の説明を入力してください

4

1 に答える 1

1

ImageMapご提供いただいたソースをざっと拝見しました。

onDraw()方法は次のImageMapとおりです。

/**
* Paint the view
* image first, location decorations next, bubbles on top
*/
@Override
protected void onDraw(Canvas canvas) {
    drawMap(canvas);
    drawLocations(canvas);
    drawBubbles(canvas);
}

したがって、コメントが述べているように、最初に完全な画像が描画され、次に「場所の装飾」(特に関心のある領域と思われる) が続き、最後に領域の「バブル」が描画されます。これは基本的に、選択可能な領域であり、あなたには適用されない場合があります。

「場所の装飾」の描画方法を見てみましょう。

protected void drawLocations(Canvas canvas) {
    for (Area a : mAreaList) {
        a.onDraw(canvas);
    }   
}

そして最後に、Areaオブジェクト (定義可能で選択可能な画像領域) の描画方法:

// an onDraw is set up to provide an extensible way to
// decorate an area. When drawing remember to take the
// scaling and translation into account
public void onDraw(Canvas canvas) {
    if (_decoration != null) {
        float x = (getOriginX() * mResizeFactorX) + mScrollLeft - 17;
        float y = (getOriginY() * mResizeFactorY) + mScrollTop - 17;
        canvas.drawBitmap(_decoration, x, y, null);
    }
}

ImageMapクラスを使用して、必要な機能のほとんどを処理するのが最善の策だと思います。Area.onDraw()提供されたメソッドを使用して、領域の「ハイライト」を処理できます。「装飾ビットマップ」を描画する代わりに、Areaクラスまたはサブクラスで定義された形状情報を使用し、Canvasメソッドを使用して、選択した領域に透明なハイライト マスクを描画します。

編集:領域の境界情報はサブクラスに格納されるため、サブクラスonDraw()ごとに個別の実装が必要になります。Area

于 2013-03-05T19:45:35.280 に答える