2

我在 SurfaceView 中实现了两个以上的按钮并且是可点击的。我在我的应用程序中创建了 customView 和 surfaceview,但是,我不知道如何将这些按钮放在我的代码中。我发现 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 并将视图添加到该 LinearLayout。现在,创建另一个包含您的按钮的 LinearLayout。

通过这种方式,您可以在 SurfaceView 上拥有更多按钮。

希望你明白我的意思。如果没有,请告诉我。我会帮你。

于 2012-12-18T03:55:59.647 回答