7

任意の形状 (塗りつぶされた円、星、三角形、透明な領域を含むビットマップなど) が与えられた場合、(最新の Android API を使用して) ユーザーがビューをクリックしたか、ビューの外をクリックしたかを知ることができるかどうかを知りたいです。 .

たとえば、円形のボタンがある場合、ユーザーが円の内側ではなく外側をクリックしたかどうかを知りたいとします。

出来ますか?

そうでない場合は、タッチ イベントのピクセルをポーリングし、透明な場合は無視し、そうでない場合はクリック イベントとして処理できますか?

4

4 に答える 4

8
ImageView image=(ImageView) findViewById(R.id.imageView1);
image.setOnTouchListener(this);
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();    

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    int pixel = bitmap.getPixel((int)event.getX(), (int)event.getY());
    int alphaValue=Color.alpha(pixel);
    return true;
}

このようにして、タッチしたピクセルのアルファ値を取得できます。タッチしたピクセルが透明かどうかを簡単に確認できるようになりました。

于 2012-07-31T11:46:15.203 に答える
2

私もそのようなことをしたかったので、FrameLayoutを微調整しました。FrameLayout を使用すると、複数のビューを重ねて追加できます。

フレームレイアウトを追加します。その中に「ビュー」を追加し、その高さと幅を match_parent に設定できます。ビューの上に、必要なボタンを追加します。

次に、コードでビューの参照を取得し、onClickListener を設定して、ユーザーがそのビューに触れるたびにそのイベントを処理できるようにします。他のボタンにもクリック リスナーを設定します。

タッチイベントを処理するだけです。ユーザーがボタンをクリックしたか、ボタンの外でクリックしたか (ユーザーがビューをクリックしたか) がわかるようになりました。

透明または半透明のボタンを作成する場合は、https://stackoverflow.com/a/11689915/1117338を確認してください。これが役立つことを願っています。

于 2012-07-31T11:31:06.667 に答える
1
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FrameLayout root = (FrameLayout)findViewById(R.id.root);
    root.setOnTouchListener(new OnTouchListener() {         
        public boolean onTouch(View v, MotionEvent event) {
            if (v.getId() == ID){
                // Your code
            }
            return true;
        }
    });
}
于 2012-07-31T11:41:01.420 に答える