【问题标题】:Add more than two button inside SurfaceView在 SurfaceView 中添加两个以上的按钮
【发布时间】:2012-12-16 09:34:51
【问题描述】:

我在 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>

【问题讨论】:

    标签: android android-layout android-intent


    【解决方案1】:

    为什么您不创建一个具有父级作为 RelativeLayout 的 LinearLayout 并将视图添加到该 LinearLayout。现在,创建另一个包含您的按钮的 LinearLayout。

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

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

    【讨论】:

    • 嘿.. 感谢您的帮助!我设法将 XML 中的布局与我的 surfaceView 链接起来。但是你知道如何从我点击进入surfaceview的按钮加载图像吗?
    • 表示点击你想在surfaceView上加载图片的按钮吧?
    • 如果我的回答对您有帮助,那么也请点赞,这样它也可以帮助其他人。
    • 哇!!感谢您的帮助!我会通读它!抱歉,我尝试对其进行投票,但我没有达到所需的声誉数量>.
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多