2011-03-04 66 views
1

这是,什么作品:安卓:FrameLayout里子不画

一)FrameLayout里有两个ImageViews 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"> 

    <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)中调用;

二)dispatchDraw倍率称为

三)图像不出现在屏幕上...

是否有人看到了,为什么?

回答

0

您是否尝试过实施onDraw()

dispatchDraw()与子视图有关。

+0

会试试看。谢谢 – decades 2011-03-04 17:24:08

0

我猜,你想实现的onDraw(),但是这可能是不够的。根据我的理解,如果他们除了子女之外没有任何可以绘制的内容,布局可能无法调用。你可能需要“欺骗”布局来绘制自己(所以你会得到onDraw调用)。我们这样做的一个简单却不高效的方法(涉及猜测......)是设置布局的背景颜色。

一个更好的办法可能就是阅读的布局代码和做正确:)

2

我意识到这个问题是旧的,但它从来没有回答正确。

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

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

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

这为我工作,至少,在我的背景。希望它可以帮助其他有相同问题的人。 :)