ViewFlipper:在视图上绘制画布

Posted

技术标签:

【中文标题】ViewFlipper:在视图上绘制画布【英文标题】:ViewFlipper: draw canvas on view 【发布时间】:2011-08-11 08:59:46 【问题描述】:

我正在使用ViewFlipper 翻转活动中的多个视图。 因此,我以这种方式将我的视图布局包含在活动布局中:

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/profileSwitcher"
android:layout_
android:layout_
>

   <include android:id="@+id/inc1" layout="@layout/chart" />
   <include android:id="@+id/inc2" layout="@layout/temp" />

翻转效果很好。

我的布局chart

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_>

<View android:id="@+id/viewChart" android:layout_
    android:layout_ />

<TextView android:text="chart" android:layout_
    android:layout_ android:textColor="#fff" />

</LinearLayout>

我想通过画布在视图viewChart 上进行绘制。所以我想我可以用这段代码解决活动中的视图:

    viewChart = (View) findViewById(R.id.viewChart);

    Canvas c = new Canvas();
    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);


    paint.setAntiAlias(true);
    paint.setColor(Color.RED);
    c.drawCircle(180, 20, 15, paint);

    viewChart.draw(c);
    viewChart.invalidate();

但是这样做时,屏幕保持空白(黑色。我认为这是主题的背景颜色)。

我的问题是:如何通过画布直接在这个视图上绘制?我做错了什么?谢谢!

【问题讨论】:

【参考方案1】:

首先你的画布应该从位图派生,这意味着你需要创建一个 ViewChart 大小的位图并从中派生画布 Canvas c = new Canvas(myBitmap)

其次,由于 ViewChart 不是自定义视图,我认为您无法直接访问其画布,因此您可以尝试将 ViewChart 设为 ImageView 并使用 viewChart 为其设置图像(图表)。 setImageBitmap(myBitmap) 而不是 draw(c) 和无效。

【讨论】:

以上是关于ViewFlipper:在视图上绘制画布的主要内容,如果未能解决你的问题,请参考以下文章

在画布上绘制片段视图

在画布上绘制视图被拖动的任何位置

调度触摸事件到画布上绘制的视图

在画布上绘制位图已缩放

将图片绘制到视图的画布上啥都不做

如何在画布上绘制并转换为位图?