如何在Android应用程序的背景上绘制?

时间:2014-06-26 14:26:21

标签: android api android-layout android-canvas

我想在普通的Android应用程序的背景上绘制一些图画。

我知道画布可以用来画画,但我的问题是:

  

1 - 我是否可以创建一个画布作为背景   应用程序上面显示文本视图和按钮?

     

2 - 画布可以创建为按钮和文本视图下方的图层吗?

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)

  1. 烨。通过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!
    
  2. 我不明白为什么不这样做,至少可以通过自定义视图完成。