我试图创建一个推出仅当用户第一次安装我的应用程序半透明演示画面。 下面是来自脉冲新闻应用的例子:
Galaxy Nexus的
歌Nexus One
取而代之的是“轻击以进行辞退”功能,我希望用户能够通过一对夫妇这样的透明的演示页面的刷卡。
对于我的第一次尝试,我修改从样本ViewPagerIndicator库。 我用半透明的PNG在ImageViews内的各视图寻呼机的片段。 然后,我推出了本作中,我的主要活动“的onCreate方法一“示范活动”。
问题:“主要活动”无法看到在后台 - 相反,它只是黑色的。 我试过的解决方案在这里 ,但没有解决问题。
有创造这样的一个更好的办法,还是我在正确的轨道上?
我也有一个相关的问题,这取决于这是如何实现的。 我试图覆盖文本和箭头,使得它们指向在后台特别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是黑色的。
第一2限定的不透明度:00为100%透明,ff为100%不透明。 所以选择介于两者之间。
你看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);
脉冲采用四个的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/
从层次结构浏览器的布局看起来像这样(红色框是RelativeLayout的容器):
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();
}
为此,您需要创建主布局前的底部布局的帮助:(结构)
<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>
总结你的主要布局在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文件中的主要布局(如果没有记错)。 然后,您可以让自己的布局, ViewFlipper
,任何你想要的第二个布局中。
创建一个新的活动(说教程)。
转到您的Activity的布局XML文件(activity_tutorial)。 下父布局,加“机器人:背景=#000”和“机器人:阿尔法=‘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>
现在,到应用程序清单文件,并在你的教程活动添加属性的android:主题=“@安卓风格/ Theme.Translucent.NoTitleBar”>
<application> ......................................... .......................................... .................................... .......................................... <activity android:name="com.aird.airdictionary.Tutorial_Activity" android:label="@string/title_activity_tutorial" android:theme="@android:style/Theme.Translucent.NoTitleBar"> </activity> </application> </manifest>
完蛋了,现在运行在任何其他活动的顶部这个活动,你可以得到理想的效果。 自定义,添加文字,imageviews和其他的东西来获得您想要的指南屏幕。 敢肯定,你可以做一个viewpager工作,这种技术。
你可以只检查了Android启动代码,因为他们这样做。 我不知道有落实。
如果是我,我会(如果只是简单的重叠),所以你不要用你的布局为您的应用螺丝,您只需建立覆盖布局,并通过直接与您的活动增加其附加过来乌尔应用程序布局WindowManager
。 可能是添加一个简单ImageView
的WindowManager
,用于侦听触摸ImageView
,或有超时删除ImageView
从您的Window
。