2

SurfaceView 内に 2 つ以上のボタンを実装しており、クリック可能です。アプリで customView と surfaceview を作成しましたが、これらのボタンをコード内に配置する方法がわかりません。ボタンを表示できるようにコードを編集します。オンラインで検索してみましたが、android java を初めて使用するため、どのように機能するのかよくわかりません。どんな助けでも大歓迎です!

SurfaceViewExample.Java

public class SurfaceViewExample extends Activity implements OnTouchListener{

OurView v;
Bitmap ball, blob;
float x,y;
Button btnClick;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    v = new OurView(this);
    v.setOnTouchListener(this);
    ball = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    x = y = 0;

    btnClick = new Button(this);
    btnClick.setText("Click");
    btnClick.setGravity(Gravity.TOP | Gravity.LEFT);
    btnClick.setVisibility(View.VISIBLE);

    //adding the btn to the Custom VIEW
    v.addView(btnClick);
    setContentView(v);

}
@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

    v.pause();
}


@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    v.resume();
}


public class OurView extends SurfaceView implements Runnable{

    Thread t = null;
    //helps to change the dimension of the surfaceview
    SurfaceHolder holder;
    boolean isItOk = false;


    public OurView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        holder = getHolder();
    }
    public void addView(Button button_clear) {
        // TODO Auto-generated method stub

    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(isItOk  == true){
            //perform canvas drawing
            //if surface view is NOT VALID
            if(!holder.getSurface().isValid()){

                continue; // if it is FALSE -- will executed the codes after this {}
            }
                Canvas c = holder.lockCanvas();
                //background of the canvas color!
                c.drawARGB(255, 150, 150, 10);
                //THREAD
                c.drawBitmap(ball, x - (ball.getWidth()/2), y - (ball.getHeight()/2), null);
                holder.unlockCanvasAndPost(c);
        }
    }

    public void pause() {
        isItOk = false;
        while(true){
            try{
                t.join();
            }
            catch ( InterruptedException e){

                e.printStackTrace();
            }
            break;
        }
        t = null;
    }

    public void resume(){
        isItOk = true;
        t = new Thread(this);
        t.start();
    }
}
@Override
public boolean onTouch(View arg0, MotionEvent me) {
    // TODO Auto-generated method stub

    //reduce the time taken for process
    try{

        Thread.sleep(50); //20 times per seconds
    }
    catch ( InterruptedException e){
        e.printStackTrace();
    }

    switch(me.getAction()){

    case MotionEvent.ACTION_DOWN:
        x = me.getX();
        y = me.getY();
        break;

    case MotionEvent.ACTION_UP:
        x = me.getX();
        y = me.getY();
        break;

    case MotionEvent.ACTION_MOVE:
        x = me.getX();
        y = me.getY();
        break;
    }

    return true;
}

}

------マイレイアウト-------

activity_main.XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

</RelativeLayout>
4

1 に答える 1

1

親が RelativeLayout である LinearLayout を 1 つ作成し、その LinearLayout にビューを追加しないのはなぜですか。その後、ボタンを含む別の LinearLayout を作成します。

このようにして、surfaceView に複数のボタンを配置できます。

あなたが私のポイントを得たことを願っています。そうでない場合は、お知らせください。私はあなたを助ける。

于 2012-12-18T03:55:59.647 に答える