Android: Programatically Add UI Elements to a View

Posted by Shivan Raptor on Stack Overflow See other posts from Stack Overflow or by Shivan Raptor
Published on 2011-11-22T10:46:08Z Indexed on 2011/11/23 1:50 UTC
Read the original article Hit count: 273

Filed under:
|

My view is written as follow:

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;
        }
    }
}

I would like to add a Button to the scene, but I don't know how to. Can anybody give me some lights?

UPDATE: Here is my Activity :

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();
    }
}

© Stack Overflow or respective owner

Related posts about android

Related posts about android-widget