【问题标题】:How can I override the canvas in my View?如何覆盖视图中的画布?
【发布时间】:2011-01-26 02:14:51
【问题描述】:

我使用的是 Android 2.1 和 Eclipse。

我定义了一个 LinearLayout,其中包含两个尺寸为:250 x 250 的组件。

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams llp = 
  new llp.LayoutParams(250, 250);

meter1View = new MeterView(this, "Meter 1");
ll.addView(meter1View, llp);
meter2View = new MeterView(this, "Meter 2");
ll.addView(meter2View, llp);   
ScrollView scrollView = new ScrollView(this);
scrollView.addView(ll);
setContentView(scrollView);

到目前为止,一切都很好。我在模拟器屏幕上看到两个垂直组件。

但是,在我的 Meter View 类中,onDraw 中画布的大小是我的模拟器屏幕的大小,即 480 x 800。

@Override
protected void onDraw(Canvas canvas) {
    int w = canvas.getWidth();
    int h = canvas.getHeight();
    Log.i(TAG, "  onDraw, w: " + w + ", h: " + h);
}

我希望画布大小为 250 x 250,以便我可以将此画布传递给绘图例程。现在,我的绘图例程在我的 LinearLayout 定义的 250 x 250 位图之外进行绘图。

我意识到我可以通过翻译画布使我的画布绘图例程工作,但如果我可以暂时用新画布覆盖原始画布会更干净。

我知道我可以通过以下方式定义自己的画布:

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

如何用我的新画布替换 View 类创建的画布? 任何帮助将不胜感激。

查尔斯

【问题讨论】:

    标签: android canvas drawing2d


    【解决方案1】:

    您应该使用视图的宽度和高度,而不是画布,两者都可以通过 getWidth() 和 getHeight() 获得。然后将这些尺寸传递给您的绘图程序。

    【讨论】:

      【解决方案2】:

      不要替换 Canvas,而是使用剪辑 rect。

      【讨论】:

        猜你喜欢
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多