3

Androidのキャンバスにボタンを配置して、画像をポップアップさせ、もう一度クリックすると画像が消えるようにしたいと思います。

public class Charts extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new Draw(this));
    }
}

private class Draw extends View {
    public Draw(Context context) {
        super(context);
    }

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }
}

上記のコードは、この後のコードの開始点として持っているもので、ペイントなどのいくつかの小さな基本的なツールを使用し、上記のようにビューを拡張しました...ボタンを配置する方法がわかりません

4

5 に答える 5

2

これが可能かどうかはわかりませんが、次の2つのオプションがあります。

  1. キャンバスにボタンを描画します。これは基本的にBitmap画像であり、クリックして、ポインタの座標がビットマップ領域の座標内にあるかどうかを確認します。

  2. または、にを入れてCanvasRelativeLayoutボタンコントロールも追加します。にいるのでRelativeLayoutButtonが上に表示されますCanvas

于 2012-08-08T07:35:53.383 に答える
1

Canvas はビューではなく、SurfaceView はビューです。ViewGroup 内に Button (またはその他のビュー) を配置できます。LinearLayout、RelativeLayout などのすべてのレイアウトは、1 つ以上の子ビューを含む ViewGroup です。

ボタンをSurfaceViewに入れたいと思います。SurfaceView にボタンを配置することはできませんが、できることは、レイアウトに SurfaceView があり、その近くにクリックするボタンがあるように UI を設計することです。

編集: @Andy Res が 2) で示唆しているのは、おそらくあなたが探しているものです。SurfaceView を RelativeLayout に配置し、同じレイアウトにボタンを配置します。または、FrameLayout を使用して、その中に SurfaceView と Button を含めることができます。

于 2012-08-08T07:34:17.883 に答える
0

これを行う方法は、.pngグラフィックを使用し、それを使用してキャンバスに描画することです。

    canvas.drawbitmap(image, rect1, rect2, paint);

ここで、imageは.pngです。rect1は画面上のボタンのターゲット位置です。rect2は、使用するボタンの部分とペイントオブジェクトです。

その後、

    @Overide 
    onTouchEvent(MotionEvent event) {}

モーションイベントアップがrect1境界(画面上の場所のターゲット位置を含む)の内側で検出されたかどうかを検出するためのコードを入力しました

それから私は私が作成したものを次のように呼びます

    Button1Clicked();

これがクリックを処理する場所です。

于 2012-08-08T07:36:23.530 に答える
0

これが私のやり方です(私にとってはうまくいきます):

  • ボタンのビットマップをキャンバスに描画します。
  • Android タッチ API を使用して、タッチ座標がビットマップ dst rec にあるかどうかを検出します。
  • 上記が当てはまる場合は、キャンバスに「ポップアップ」したいビットマップを描画します。

これにより、これを行う方法についてより良いアイデアが得られることを願っています。

アップデート:

private class Draw extends View implements OnTouchListener {
    Rect button = new Rect(); // Define the dimensions of the button here
    boolean buttonClicked;

    public Draw(Context context) {
        super(context);
    }

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (buttonClicked == true) {
            canvas.drawBitmap(source, null, button, null); 
                    // Source will be a that of a clicked button bitmap
        } else {
            canvas.drawBitmap(source, null, button, null); 
                    // Source will be a that of a non clicked button bitmap
        }

    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        if (button.contains(event.getX(), event.getY())) {
            buttonClicked = true;
        } else {
            buttonClicked = false;
        }

        return true;
    }

}

PS: コードが動かなくても心配しないでください。私はまだテストしていません。ビューのレンダリング方法がわからない場合は、SurfaceView に移動してレンダリング スレッドを作成することをお勧めします。チュートリアルは次のとおりです: http://www.edu4java.com/androidgame.html

于 2012-08-08T08:01:55.687 に答える
0

私にも同様の要件があり、昔ながらの方法で解決しました

  1. キャンバスを使用してボタンを描画し、ボタンの四隅すべての x 座標と y 座標を書き留めます。
  2. ユーザーが画面に触れると、x 座標と y 座標が取得されます。
  3. ここで、ユーザーが触れた場所がボタンの場所の座標の下にあることを確認します。はいの場合は、コードでボタン機能を実行します。それ以外の場合は何もしません
于 2013-12-09T13:27:53.747 に答える