我想在普通的Android应用程序的背景上绘制一些图画。
我知道画布可以用来画画,但我的问题是:
1 - 我是否可以创建一个画布作为背景 应用程序上面显示文本视图和按钮?
2 - 画布可以创建为按钮和文本视图下方的图层吗?
答案 0 :(得分:1)
最简单的方法是将子窗口的根布局子类化。例如,如果您的布局当前是这样的:
<?xml version="1.0"?>
<RelativeLayout ... >
<!-- lots of views -->
</RelativeLayout>
然后你可以简单地创建一个扩展RelativeLayout
的类并重新定义你的视图:
<?xml version="1.0"?>
<com.myapp.mypackage.MyCustomLayout ... >
<!-- lots of views -->
</com.myapp.mypackage.MyCustomLayout>
自定义视图类本身将如下所示:
package com.myapp.mypackage;
//imports go here
public class MyCustomLayout extends RelativeLayout {
public MyCustomLayout(Context c) {
super(c);
this.setWillNotDraw(false); //important
}
// Override other two superclass constructors as well
@Override
public void onDraw(Canvas canvas) {
// Drawing code goes here.
super.onDraw(canvas);
}
}
实施此功能应自动回答您的问题#2。
答案 1 :(得分:0)
烨。通过XML可以对视图执行的所有操作都可以通过Java动态完成。例如,您可以通过调用View#setBackground来设置它,而不是通过android:background
属性和XML中的drawable设置背景。要将Canvas图像设置为背景,您需要的是将Canvas的Drawable版本支持Canvas到该方法中(并且可能每次更新Canvas时再次调用它)。这是未经过测试的代码,但看起来您可以通过以下方式执行此操作:
// Bitmap on which the Canvas calls will draw
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
Canvas canvas = new Canvas(bitmap);
// ... Draw on your canvas
// Grab the view on which to set the background
View main = findViewById(R.layout.activity_main);
// We need the Bitmap as a Drawable
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
// Set the background
main.setBackground(drawable);
// Hopefully it works!
我不明白为什么不这样做,至少可以通过自定义视图完成。