我们假定你已经懂得基本的Android的编程基础而只需着重掌握这些“高级”主题内容。
步骤:
1)创建一个用来画背景和边框的class
2)在xml中引用你自定义的view
(1)创建自定义的透明面板
由于我们需要我们的面板能够容纳其他空件,因此我们的透明面板类将继承自Android的最常用的LinearLayout,
同时也希望我们的控件水平排版,我们也可以选择RelativeLayout如果需要的话。
TransparentPanel extends LinearLayout
TransparenPanel的魔力在于它的dispathDraw()方法。对于我们已经定义好的view'类,你也许会问为什么我们重写
dispatchDraw()函数而不是onDraw()函数。由于某些原因,LinearLayout 并不会自己调用onDraw()函数,可能因为阿
开发者认为Linearlayout 不会画任何东西,但是,我们用dispatchDraw()函数来画背景,并调用Super.dispatchDraw()
来渲染其他子控件。
protected void dispatchDraw(Canvas canvas){
RectF drawRect = new RectF();
drawRect.set(0,0,getMessuredWidth(),getMessuredHeight());
canvas.drawRoundRect(drawRect,5,5,innerPaint);
canvas.drawRoundRect(drawRect,5,5,borderParint);
super.dispatchDraw(canvas);
}
对于这些函数,我们来看看。首先我们计算得到一个RectF来设定画背景范围的,然后我们调用drawRect来画背景,然后,第一个
drawRoundRect画我们的背景,而第二个函数画出我们的边框,最后我们调用super.dispatchDraw化其他控件。
灰色背景渲染的Alpha值是==225.使得足够能够透过背景上的一些东西。
innerPaint.setARGB(225, 75, 75, 75);
而边框我们设定描边Stroke==2
borderPaint = new Paint();
borderPaint.setARGB(255, 255, 255, 255);
borderPaint.setAntiAlias(true);
borderPaint.setStyle(Style.STROKE);
borderPaint.setStrokeWidth(2);
我们设定setAntiAlia==true,使得边框可以与周围进行无缝混合。
(2)在xml中应用自己的TransparentPanel标签
<com.pocketjourney.view.TransparentPanel
android:id=”@+id/transparent_panel”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:paddingLeft=”5px”
android:paddingTop=”5px”
android:paddingRight=”5px”
android:paddingBottom=”5px”>
<Button android:id=”@+id/button_click_me”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Click Me!”>
</com.pocketjourney.view.TransparentPanel>
这里添加了一个子控件Button。
附件:源代码连接