Android:以编程方式将UI元素添加到视图

时间:2011-11-22 10:46:09

标签: android android-widget

我的观点如下:

package com.mycompany;

import android.view.View;
import java.util.concurrent.TimeUnit;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.graphics.Paint;
import android.graphics.Point;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.*;



public class GameEngineView extends View implements SensorEventListener {
    GameLoop gameloop;
    String txt_acc;
    float accY;
    ArrayList<Point> bugPath;

    private SensorManager sensorManager;

    private class GameLoop extends Thread {
        private volatile boolean running = true;

        public void run() {
            while (running) {
                try {
                    TimeUnit.MILLISECONDS.sleep(1);
                    postInvalidate();
                    pause();

                } catch (InterruptedException ex) {
                    running = false;
                }
            }
        }

        public void pause() {
            running = false;
        }

        public void start() {
            running = true;
            run();
        }

        public void safeStop() {
            running = false;
            interrupt();
        }

    }

    public void unload() {
        gameloop.safeStop();

    }

    public GameEngineView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        init(context);

    }

    public GameEngineView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        init(context);
    }

    public GameEngineView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        init(context);
    }

    private void init(Context context) {
        txt_acc = "";

        // Adding SENSOR
        sensorManager=(SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        // add listener. The listener will be HelloAndroid (this) class
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);

        // Adding UI Elements : How ?
        Button btn_camera = new Button(context);
        btn_camera.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.FILL_PARENT));
        btn_camera.setClickable(true);
        btn_camera.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("clicked the camera.");
            }
        });


        gameloop = new GameLoop();
        gameloop.run();

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        //super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        System.out.println("Width " + widthMeasureSpec);
        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
    }

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

        Paint p = new Paint();
        p.setColor(Color.WHITE);
        p.setStyle(Paint.Style.FILL);
        p.setAntiAlias(true);
        p.setTextSize(30);
        canvas.drawText("|[ " + txt_acc + " ]|", 50, 500, p);

        gameloop.start();

    }
    public void onAccuracyChanged(Sensor sensor,int accuracy){

    }
    public void onSensorChanged(SensorEvent event){
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
            //float x=event.values[0];
            accY =event.values[1];
            //float z=event.values[2];

            txt_acc = "" + accY;
        }
    }
}

我想在场景中添加一个Button,但我不知道该怎么做。有人可以给我一些灯吗?

更新:这是我的活动:

public class MyActivity extends Activity {
    private GameEngineView gameEngine;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // add Game Engine
        gameEngine = new GameEngineView(this);

        setContentView(gameEngine);
        gameEngine.requestFocus();
    }
}

我正在关注tutorial

1 个答案:

答案 0 :(得分:1)

    detailListView = (LinearLayout) findViewById(R.id.DetailsLinearLayout); // Find the layout where you want to add button
    Button button = new Button(this);
 button.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT
                    ,ViewGroup.LayoutParams.WRAP_CONTENT));
    detailListView.addView(button);//add view to add