如何为Android应用程序创build透明的演示屏幕?

我正在尝试创build仅在用户首次安装我的应用程序时才启动的半透明演示屏幕。 以下是Pulse News应用程序的一个示例:

Galaxy Nexus

Pulse Nexus上的Pulse新闻截图

Nexus One

在这里输入图像描述

我希望用户能够通过几个这样的透明演示页面进行轻扫,而不是使用“点击即可解散”function。

对于我的第一次尝试,我从ViewPagerIndicator库中修改了一个示例。 我在每个视图分页器的片段中使用了ImageView中的半透明PNG。 然后,我在“主要活动”的onCreate方法中将其作为“演示活动”启动。

问题:“主要活动”无法在背景中看到 – 而只是黑色。 我在这里尝试了解决scheme,但是这并没有解决问题。

有没有更好的方法来创build这样的事情,还是我在正确的轨道上?

我还有另一个相关的问题,这取决于如何实施。 我正在尝试覆盖文本和箭头,以便在背景中指向特定的UI组件。 通过使用具有文本和箭头的PNG,很可能无法在不同的设备上正确缩放。 也就是说,箭头可能不一定指向背景中正确的UI组件。 有没有办法解决这个问题呢?

谢谢!

这是我第一次尝试的代码:

DemoActivity.java

public class DemoActivity extends FragmentActivity { DemoFragmentAdapter mAdapter; ViewPager mPager; PageIndicator mIndicator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.demo_activity); mAdapter = new DemoFragmentAdapter(getSupportFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(mAdapter); //mPager.setAlpha(0); UnderlinePageIndicator indicator = (UnderlinePageIndicator)findViewById(R.id.indicator); indicator.setViewPager(mPager); indicator.setFades(false); mIndicator = indicator; } } 

DemoFragmentAdapter.java

 class DemoFragmentAdapter extends FragmentPagerAdapter { protected static final int[] CONTENT = new int[] { R.drawable.demo1, R.drawable.demo2, R.drawable.demo3, R.drawable.demo4}; private int mCount = CONTENT.length; public DemoFragmentAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return DemoFragment.newInstance(CONTENT[position % CONTENT.length]); } @Override public int getCount() { return mCount; } public void setCount(int count) { if (count > 0 && count <= 10) { mCount = count; notifyDataSetChanged(); } } } 

DemoFragment.java

 public final class DemoFragment extends Fragment { private static final String KEY_CONTENT = "TestFragment:Content"; public static DemoFragment newInstance(int content) { DemoFragment fragment = new DemoFragment(); fragment.mContent = content; return fragment; } private int mContent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) { mContent = savedInstanceState.getInt(KEY_CONTENT); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ImageView image = new ImageView(getActivity()); image.setBackgroundResource(mContent); LinearLayout layout = new LinearLayout(getActivity()); layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); layout.setGravity(Gravity.CENTER); layout.addView(image); return layout; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(KEY_CONTENT, mContent); } } 

把你的演示信息放在一个不同的活动中,给它下面的主题。

 <style name="Transparent" parent="@android:style/Theme.NoTitleBar"> <item name="android:windowContentOverlay">@null</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">false</item> </style> 

如果你使用ActionBarSherlock改变parent@style/Theme.Sherlock

这会给你一个透明的活动,所以你将能够看到它下面的活动。

现在我猜你也想要一个半透明的背景。

在透明活动的xml布局中添加:

 android:background="#aa000000" 

最后6位数字定义颜色:000000是黑色的。

前两个定义不透明度:00是100%透明,ff是100%不透明。 所以select之间的东西。

你看过ShowcaseView吗? https://github.com/Espiandev/ShowcaseView

使用这个:

 View showcasedView = findViewById(R.id.view_to_showcase); ViewTarget target = new ViewTarget(showcasedView); ShowcaseView.insertShowcaseView(target, this, R.string.showcase_title, R.string.showcase_details); 

Pulse正在使用一个有四个ImageView和四个TextView的RelativeLayout。 屏幕截图中的文字都是TextView的自定义字体。

在您的清单中,将以下内容添加到您的活动中:

机器人:主题= “@风格/ Theme.Transparent”>

在你的外部RelativeLayout中添加:

机器人:背景= “#aa000000”

到您的styles.xml文件中:

 <style name="Theme.Transparent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">false</item> <item name="android:backgroundDimEnabled">false</item> </style> 

一个示例如何编程自定义字体,您可以在:

https://github.com/commonsguy/cw-android/tree/master/Fonts/FontSampler/

Hierarchy Viewer中的布局看起来像这样(红框是RelativeLayout容器):

在这里输入图像描述

为此,您需要在主布局的底部创build帮助布局,例如:(结构)

 <Parent layout> <Layout 1>(Linear,Relative,....) Main layout your view... </Layout 1> <Layout help> set #70000000 as background of this layout #70(transparent range can change) 000000(black) and height and width as fillparent </Layout help> </Parent layout> 
 setContentView(R.layout.sample_main); showOverLay(); private void showOverLay(){ final Dialog dialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar); dialog.setContentView(R.layout.transparent); RelativeLayout layout = (RelativeLayout) dialog.findViewById(R.id.transparent); layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); } }); dialog.show(); } 

将你的主布局包装在一个RelativeLayout ,然后添加第二个布局,如下所示:

 <RelativeLayout .... > <LinearLayout .... > <!-- Contents of your main layout --> </LinearLayout> <LinearLayout .... android:background="#44000000" > <!-- This is alpha 68/255, black --> <!-- Contents of your overlay layout --> </LinearLayout> </RelativeLayout> 

我相信覆盖布局在XML文件的主布局之下(如果内存服务的话)。 然后,您可以在第二个布局中创build自己的布局, ViewFlipper ,无论您想要什么。

你可以看看Android的启动器代码,因为他们这样做。 我不知道在那里执行。

如果是我,我会(如果只是一个简单的覆盖),所以你不要拧你的应用程序的布局,只需创build您的覆盖布局,并将其附加在您的应用程序布局直接添加到您的活动WindowManager 。 可以像添加ImageViewWindowManager一样简单,监听ImageView触摸,或者有一个超时从Window删除ImageView

做一个新的活动(说教程)。

转到您的Activity的布局xml文件(activity_tutorial)。 在父级布局下,添加“android:background =#000”和“android:alpha =”0.5“

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Tutorial_Activity" android:background="#000" android:alpha="0.5"> .................................................. .................................................... ............................................. ............................................... </RelativeLayout>