我遇到了类似的问题,我的客户想要一个应用程序的演练,其中整个屏幕必须变得更白(正如他们所说:“透明”),除了由覆盖语音气泡解释的按钮。
对您来说幸运的是,您的布局并不像我必须使用的那样复杂 :)
现在,您可以通过两种方式获得透明效果,或者使用白色背景并调用所有视图的 setAlpha() 方法,或者您可以创建半透明的白色叠加层。
如果您使用叠加层,则必须找到一种通过叠加层显示不透明按钮的方法。这可能会有点复杂。如果您使用第一个选项,您可以在不透明视图上设置Alpha(1) 以使其显示。
setAlpha() 方法仅在 api 版本 11+ 中可用,因此如果您针对较早版本,您可能需要以稍微复杂的方式执行此操作。
在蜂窝前视图上设置 alpha 的示例:
按钮的布局(根据需要制作它们,只需使它们相似,以便您可以循环浏览它们):
<LinearLayout
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:tag="image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tile"/>
<TextView
android:tag="text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF000000"
android:text="button1"/>
</LinearLayout>
在您的程序中,当您想让按钮透明时:
LinearLayout l = (LinearLayout) findViewById(R.id.button1);
((ImageView)l.findViewWithTag("image")).setAlpha(0x7F);
((TextView)l.findViewWithTag("text")).setTextColor(0x7F000000);
当您决定如何创建透明效果时,您必须决定如何显示覆盖文本/气泡。您很可能希望将其放在整个布局顶部的单独层中,以确保它不受新视图的影响。
实现此目的的一种方法是将根布局元素更改为 FrameLayout,然后在其中创建/显示。例如:
<FrameLayout background="#FFFF"> <!-- white background, just in case -->
<LinearLayout>
<!-- the rest of your layout -->
</LinearLayout>
<LinearLayout visibility="gone"> <!-- this will be your overlay view -->
<ImageView /> <!-- the arrow/ring -->
<TextView /> <!-- the description -->
</LinearLayout>
</FrameLayout>
显示介绍时,将隐藏的覆盖视图的位置设置为要解释的表格项的位置,将文本更改为适当的字符串/资源并显示视图。
介绍结束后,您重置所有按钮的 alpha 值,并将叠加层的可见性再次设置为消失。