【发布时间】:2015-04-17 23:44:38
【问题描述】:
所以我有一个活动,它有自己的 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);
}
这是调用上述视图的活动:
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(基本上被冻结)和按钮能够被点击。
我已经查看了堆栈溢出的所有内容,所有解决方案都使用透明的活动背景(但随后更改 setContentView(activity_main) 会清除先前的视图,并且是否透明无关紧要。)或者,它们只是定义了所有内容在同一个 XML 文件中,因此他们可以简单地将内容视图设置为该 XML 文件并且很好。请注意,我不能这样做,因为我的一个视图使用 Canvas 而另一个使用 XML。
那么如何同时显示 2 个视图,其中一个透明地位于另一个下方?
【问题讨论】:
标签: android xml android-canvas transparency android-view