2013-05-21 21 views
21

GUIリモコンを設計していますが、リモートボタンごとに別々のボタンを作成するのではなく、完全な準備ができたリモートイメージを取得し、クリック可能な部分を設定します。 これを行うにはモーションイベントではなく方法がありますか?画像のクリック可能な領域

+0

あなたは一つの画像でそれをすべてを作りたいですか? – kabuto178

+1

@ kabuto178はい.... –

+0

はどうにかして画像を行と列に分割する方法ですか? –

答えて

30

私はあなたの両方のための2つの解決策を持っています。両方の画像は、クリック可能なままですが、クリックした領域についての情報を得ることができます。

解決方法1:

あなたは最終的にあなたがクリックされたエリアを知るために来ることができる画像をマスクし、その下にimage.soのピクセルを得ることができます。

ここでクリックするたびに、ピクセルの色がbackground imageであることを確認し、クリックされた領域を知るために設定された定義済みの色と一致させることができます。

前景画像: Foreground image

背景画像: Background image

クリッカブルエリア:まだ混乱し Representing clickable area

参考: チュートリアルthisをご利用いただきますようお願いいたします。

解決方法2:

あなたは座標を使用して画像をマッピングすることができますし、それに応じてあなたがクリックされた領域の情報を取得することができます。

例:あなたはこのようになりますカンザスためhere

座標からごmappedimageを作成することができ

あなたは座標を認識していない場合は、座標と MappedImage、

 <area shape="poly" coords="243,162,318,162,325,172,325,196,244,196" id="@+id/area14" name = "Kansas"/> 

MappedImage with co-ordinates

参考: Android Image Mappingをご覧ください。

私はそれが参考になることを願っています!

+0

大丈夫、ありがとう.......私はすぐにそれをテストされます –

+0

ありがとう!どのようにチタン合金のアプリケーションでこれらの方法のいずれかを使用する任意のアイデア? – learner123

+0

イメージをズームしてピクセルを取得する必要がある場合はどうすればよいですか?それは同じ色を返しますか? –

7

ボタンは引き続き使用できます。

画像上に適切な場所に配置して、見えなくすることができます。

XMLで

<Button android:visibility="invisible"/> 

それとも

Button mybutton = (Button) v1; 
mybutton.setVisibility(View.INVISIBLE); 
+1

私はそれにいくつかのボタンを持つ相対レイアウトを持っています。私が相対レイアウト上に背景イメージを設定し、ボタンを不可視に設定すると、onClickはトリガされません。私はそれらを目に見えるように設定します。 – Rule

+0

これはあなたのボタンを見えなくする方法に依存しませんか?つまり、 'visibility'属性を' gone'(または 'invisible')に設定すると、クリックできませんが、ボタンの背景を100%透明にしようとするとどうなりますか?クリックイベント(??) –

+0

@sealzこのソリューションは気に入っていますが、可視性は機能しませんでした。私は背景を透明にし、それは働いた。 – jcaruso

1

私は、同じ課題を持っていたあなたがいる場合

onPhotoTap(View view, float x, float y){} 

イベントをリッスンしてチェックすることができるライブラリー"PhotoView"、とそれを解決タブは画像領域の内側にあり、特定のタスクを実行します。

他の開発者がこのような機能をより迅速に実装するためのライブラリを作成しました。 Githubにあります:ClickableAreasImages

このライブラリを使用すると、画像内のクリック可能な領域を定義し、オブジェクトを関連付けてその領域のタッチイベントを聴くことができます。

ライブラリを使用する方法

:@sealz返信を改善

public class MainActivity extends AppCompatActivity implements OnClickableAreaClickedListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Add image 
     ImageView image = (ImageView) findViewById(R.id.imageView); 
     image.setImageResource(R.drawable.simpsons); 

     // Create your image 
     ClickableAreasImage clickableAreasImage = new ClickableAreasImage(new PhotoViewAttacher(image), this); 

     // Initialize your clickable area list 
     List<ClickableArea> clickableAreas = new ArrayList<>(); 

     // Define your clickable areas 
     // parameter values (pixels): (x coordinate, y coordinate, width, height) and assign an object to it 
     clickableAreas.add(new ClickableArea(500, 200, 125, 200, new Character("Homer", "Simpson"))); 
     clickableAreas.add(new ClickableArea(600, 440, 130, 160, new Character("Bart", "Simpson"))); 
    } 

    // Listen for touches on your images: 
    @Override 
    public void onClickableAreaTouched(Object item) { 
     if (item instanceof Character) { 
      String text = ((Character) item).getFirstName() + " " + ((Character) item).getLastName(); 
      Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); 
     } 
    } 
... 
} 
+0

円などの長方形ではない領域のクリックを確認する必要がある場合はどうすればよいですか?あなたのライブラリーでは使えますか?ありがとう。 – trinity420

0

、ここに私の答え:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_centerInParent="true" 
     android:layout_alignTop="@+id/mail" 
     android:layout_alignBottom="@+id/mail" 
     > 
     <Button 
      android:id="@+id/leftMail" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight=".5" 
      android:background="@android:color/transparent" 
      /> 
     <Button 
      android:id="@+id/rightMail" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight=".5" 
      android:background="@android:color/transparent"  
      /> 
     </LinearLayout> 
    <ImageView 
     android:id="@+id/mail" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:src="@drawable/mail1600x600" 
     android:layout_centerInParent="true" 
     /> 
</RelativeLayout> 
関連する問題