I am implementing more than two buttons inside SurfaceView and are clickable. I have created customView and surfaceview in my app but however, I do not know how to put these button inside my code.I have found out that surfaceview can not have any “child”, but I am struck , I do not know how should I edit my code so that I able to get the button appear.I have tried searching it online but I do not really understand how does it works, as I am new to android java.
Any help will be greatly appreciated!
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;
}
}
——MYLayout——-
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>
Why you not create one LinearLayout which have parent as RelativeLayout and add view to that LinearLayout. Now after that create another LinearLayout which contain your buttons.
In this way you can have more then ona button on your surfaceView.
Hope you got mypoint. If not then let me know. i will help you.