这是有效的:
a)在main.xml中有两个ImageView的FrameLayout
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:id="@+id/frameLayout1"
android:layout_height="wrap_content">
<ImageView android:src="@drawable/radar_background"
android:id="@+id/background" android:layout_width="wrap_content"
android:layout_height="wrap_content"></ImageView>
<ImageView android:src="@drawable/radar_sector" android:id="@+id/sector"
android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
</FrameLayout>
b)背景上的RotateAnimation,而前景扇区保持不变
因为我需要在背景图像上做更多的工作,所以我将它放入FrameLayout子类并相应地更改了main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:id="@+id/frameLayout1"
android:layout_height="wrap_content">
<com.decades.SensorTest.RadarView
android:id="@+id/background" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView android:src="@drawable/radar_sector" android:id="@+id/sector"
android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
</FrameLayout>
这是新的RadarView.java:
public class RadarView extends FrameLayout {
private Bitmap mRadar;
public RadarView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public RadarView(Context context) {
super(context);
init();
}
private void init() {
mRadar = BitmapFactory.decodeResource(getResources(), R.drawable.radar_background);
}
@Override
public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
canvas.drawBitmap(mRadar, 0, 0, null);
}
}
会发生什么:
a)在setContentView(R.layout.main);
期间调用构造函数b)调用dispatchDraw覆盖
c)图像不出现在屏幕上......
有人看到,为什么?
答案 0 :(得分:4)
我意识到这个问题已经过时了,但它从来没有得到适当的回答。
实现视图以放入视图组是一种合理的方法,但有时您不想这样做(假设您有一个视图组类以某种方式排列包含的视图)。 在这种情况下,您需要从布局(视图组)视图类中进行绘制。
我认为除了实际的dispatchDraw函数之外,给定的代码应该可以读取它。你错过了canvas.save()和canvas.restore()。 应该很容易快速工作的示例:
@Override
public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
canvas.save();
canvas.drawCircle(cX, cY, bgRadius, bgPaint);
canvas.restore();
}
至少在我的背景下,这对我有用。希望它可以帮助那些有同样问题的人。 :)
答案 1 :(得分:1)
您是否尝试过实施onDraw()?
dispatchDraw()与子视图有关。
答案 2 :(得分:0)
我认为您应该扩展查看类并覆盖 onMeasure()和 onDraw()方法。
此处提供更多信息:
http://developer.android.com/guide/topics/ui/custom-components.html
例:
http://www.barebonescoder.com/2010/06/android-development-simple-2d-graphics-part-1/
答案 3 :(得分:0)
我猜你想要实现onDraw(),但这可能还不够。根据我的理解,如果除了孩子之外没有任何东西可以绘制,布局可能不会调用onDraw。你可能需要&#34;技巧&#34;绘制自己的布局(这样你就可以进行onDraw调用)。我们这样做的简单而无效的方法(涉及猜测...)是设置布局的背景颜色。
更好的方法是阅读布局代码并正确执行:)