如何为Android应用创建透明演示屏幕?

How do you create a transparent demo screen for an Android app?

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

Galaxy Nexus

Example screenshot from Pulse News on Galaxy Nexus

Nexus One

enter image description here

我希望用户能够通过几个这样的透明演示页面轻扫,而不是"点按即关闭"功能。

对于我的第一次尝试,我修改了ViewPagerIndicator库中的示例。我在每个视图寻呼机片段中的ImageViews中使用了半透明的PNG。然后我在"主要活动"的onCreate方法中将其作为"演示活动"启动。

问题:在背景中无法看到"主要活动" - 相反,它只是黑色。我在这里尝试了解决方案,但这并没有解决问题。

有没有更好的方法来创造这样的东西,还是我走在正确的轨道上?

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

谢谢!

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

DemoActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
    }
}


将您的演示信息放在不同的活动中,并为其提供以下主题。

1
2
3
4
5
6
7
<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布局(透明活动)中添加:

1
android:background="#aa000000"

最后6位数定义颜色:000000为黑色。

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