gpt4 book ai didi

Android: FrameLayout 子类不绘制

转载 作者:行者123 更新时间:2023-11-29 15:32:16 24 4
gpt4 key购买 nike

这是有效的:

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) 在背景上旋转动画,而前景部分保持不变

因为我需要对背景图像做更多的工作,所以我将其放入 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 override

c) 图像没有出现在屏幕上...

有没有人看到,为什么?

最佳答案

我意识到这个问题很老了,但从来没有得到正确的回答。

实现一个 View 以放入 View 组是一种合理的方式,但有时您不想这样做(假设您有一个 View 组类以某种方式排列包含的 View )。在这种情况下,您需要从布局( View 组) View 类中绘制。

除了实际的 dispatchDraw 函数之外,我认为通过阅读给定的代码应该可以工作。您错过了 canvas.save() 和 canvas.restore()。应该很容易快速上手的例子:

@Override
public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
canvas.save();
canvas.drawCircle(cX, cY, bgRadius, bgPaint);
canvas.restore();
}

至少在我的情况下,这对我有用。希望它能帮助其他有同样问题的人。 :)

关于Android: FrameLayout 子类不绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com