How do you create a transparent demo screen for an Android app?
我正在尝试创建一个半透明的演示屏幕,该屏幕仅在用户首次安装我的应用程序时启动。以下是Pulse News应用程序的示例:
Galaxy Nexus
Nexus One
我希望用户能够通过几个这样的透明演示页面轻扫,而不是"点按即关闭"功能。
对于我的第一次尝试,我修改了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,请将
这将为您提供透明的活动,因此您将能够看到它下面的活动。
现在我猜你也想要一个半透明的背景。
在xml布局(透明活动)中添加:
1 | android:background="#aa000000" |
最后6位数定义颜色:000000为黑色。
前2个定义不透明度:00是100%透明,ff是100%不透明。所以选择两者之间的东西。