我在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;
}
}
------ ------- 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>
答案 0 :(得分:1)
为什么不创建一个具有parent作为RelativeLayout的LinearLayout并将视图添加到该LinearLayout。之后再创建另一个包含按钮的LinearLayout。
通过这种方式,您可以在SurfaceView上使用更多ona按钮。
希望你得到了我的观点。如果没有,请告诉我。我会帮助你的。