androidでCanvasの上にButtonを置く
多少の罪悪感を感じつつエアコンを使っている。
さて、訳あってandroidでCanvasの上にButtonを置かなくてはならなくなったので、少し調べたところ、以下のサイトが見つかった。
Create a Button on a Canvas - Android Beginners
何だか良く分からないが、RelativeLayoutの子としてCanvas(を持ったView)とButtonを定義してやれば、ButtonをCanvas上に好きなように置けるらしい。
ので、早速やってみた。
- ButtonOnCanvas.java
package jp.headcubicle; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.Toast; public class ButtonOnCanvas extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(listener); } OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(ButtonOnCanvas.this, "Button on Canvas", Toast.LENGTH_SHORT).show(); } }; }
- CanvasTest.java
package jp.headcubicle; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.View; public class CanvasTest extends View { public CanvasTest(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 背景色を設定 this.setBackgroundColor(Color.WHITE); // 適当に図形を書く Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(200, 200, 60, paint); paint.setColor(Color.GREEN); canvas.drawRect(300, 300, 400, 400, paint); paint.setColor(Color.BLUE); Path path = new Path(); path.moveTo(200, 300); path.lineTo(150, 400); path.lineTo(250, 400); canvas.drawPath(path, paint); } }
- main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <jp.headcubicle.CanvasTest android:layout_width="fill_parent" android:layout_height="fill_parent" > </jp.headcubicle.CanvasTest> <Button android:id="@+id/button" android:text="@string/button_text" android:layout_marginLeft="180px" android:layout_marginTop="250px" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
- strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ButtonOnCanvas</string> <string name="button_text">ButtonOnCanvas</string> </resources>
- 実行結果