我有一个活动,有自己的XML文件,还有一个只使用画布而没有XML的单独视图。下面是代码解释,问题和疑问在代码下方。
这是第一个视图,使用画布进行绘制:
public class BallView extends View {
public BallView (Context context) {
super(context);
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
...//create Ball objects
}
}
球体对象,实际在画布上绘制:
public Ball(int xMax, int yMax) {
bounds = new RectF();
paint = new Paint();
...(initialize variables)
}
public void begin(Canvas canvas){
bounds.set(...);
paint.setColor(...);
canvas.drawOval(bounds, paint);
}
以下是相关视图调用的活动内容:
```xml
这里是调用上述视图的活动:
```public class CircleBounceScreen extends ActionBarActivity{
View ballView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ballView = new BallView(this);
setContentView(ballView);
.... //do stuff
}
// some triggermethod
public void trigger(){
setContentView(R.id.activity_main);
//fade the button in
//wait for the button to be clicked
}
}
现在,我在activity_main XML文件中有一个按钮。
<LinearLayout
...alignment stuff >
<Button android:id="@+id/restart_button"
...design stuff
android:visibility="gone"/>
</LinearLayout>
在ballView执行一段时间后,它会通过监听器通知活动。我希望发生的事情是:ballView保持在视图中,只是在后台,XML文件中的按钮显示在其上方。这将允许ballView(基本上被冻结)和按钮可以被点击。
我已经在Stack Overflow上搜索了很久,所有的解决方案都使用透明的活动背景(但是改变setContentView(activity_main)会擦除上一个视图,无论是透明还是不透明都没有影响)。或者,他们仅仅在同一XML文件中定义所有内容,这样他们就可以简单地将setContentView设置为该XML文件,然后就可以了。请注意,我不能这样做,因为我的一个视图使用Canvas,另一个使用XML。
那么,如何同时显示2个视图,其中一个透明地位于另一个下面呢?