3

私はアンドロイドが初めてです。Android で独自のカスタム ボタンを作成したいです。カスタム ボタンを作成するために使用したメソッドは次のとおりです。1. ペイントで好きなように単純な画像を描画し、描画可能なリソースに移動してその画像を貼り付けます。そこから、これらの画像をボタンとして使用できます。私のイメージがこのようなものだとします。ここに画像の説明を入力

この画像の残りの部分を緑色の透明を除いて作成し、緑色の領域のみをタッチできるようにしました。このため、このコードを使用しています。

 Bitmap TheBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.green);
        int eventPadTouch = event.getAction();
        int iX = (int) event.getX();
        int iY = (int) event.getY();

        int[] location = new int[2];
        v.getLocationOnScreen(location);

        int viewX = location[0];
        int viewY = location[1];


        switch (eventPadTouch) {
            case MotionEvent.ACTION_DOWN:
                if (iX>=viewX & iY>=viewY & iX<=(viewX+TheBitmap.getWidth()) & iY<=(viewY+TheBitmap.getHeight())) {                 
                    if (TheBitmap.getPixel(iX,iY)!=0) {

                        Intent intent = new Intent(this, NewActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);

                        showPressedState();
                        return false; 
                    } 
                }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                showNormalState();
                break;
        }           
        return true;
    }

しかし、この画像をこのように作成すると ここに画像の説明を入力 、画像の曲線部分の下が再びタッチ可能になるという問題に直面していますが、タッチ不可にしました。次の問題に移ると、この種のボタンを作成したい場合はここに画像の説明を入力 、すべての部分をボタンとして使用して、その上でさまざまなアクティビティを実行できるようにすることは可能ですか?

Android は LINEAR LAYOUT、RELATIVE LAYOUT、WEBVIEW などの限られたタイプのレイアウトしか提供しないため、これがすべて起こっていることがわかりました。それで、私がレイアウトの境界を与えることができるならば、私たち自身のレイアウト手段を定義する方法はありますか.

4

1 に答える 1

5

私の考えは、押したピクセルの色を手動で確認し、それに基づいて、さまざまなタッチイベント(さまざまなカラーケース)を切り替えることができるということです。あなたが達成したいことを達成するためのより簡単な方法はないと思います。

しかし、画像がグラデーションで構成されている場合や、クリック可能な異なる領域に同じ色が含まれている場合はどうでしょうか? 次の例を検討してください。

ここに画像の説明を入力

ご覧のとおり、4 つの異なる色領域を持つ画像がありますが、各領域には白いピクセルもたくさんありますよね? ボタンの背景が単色ではなく、たとえばグラデーションなどで構成されている場合、それぞれに異なるtransparency値 (255、254、253 など) を持たせることができます。これは、ユーザーには気付かれませんが、簡単に区別するために使用できます。あなたが押した領域の間。

したがって、onClick メソッド内では次のようになります。

//Not sure about below line
alpha = ((bitmap.getPixel((int)event.getX(), (int)event.getY())) >>> 24);

switch(alpha) 
{
    case 255:
        //your code
    break;
    case 254:
        //your code
    break;
    default:
        //your code
    break;
}

また、これを読むことを検討するかもしれません:

于 2013-06-24T06:27:45.270 に答える