J'essaie de créer un écran de démonstration semi-transparent qui n'est lancé que lorsqu'un utilisateur installe mon application pour la première fois. Voici un exemple tiré de l'application Pulse News :
Galaxy Nexus
Nexus One
Au lieu d'une fonction "tapoter pour quitter", je veux que l'utilisateur puisse faire défiler plusieurs pages de démonstration transparentes.
Pour ma première tentative, j'ai modifié un échantillon de l'ouvrage ViewPagerIndicator bibliothèque. J'ai utilisé des PNG semi-transparents dans des ImageViews à l'intérieur de chacun des fragments de l'afficheur. J'ai ensuite lancé cette activité en tant qu'activité de démonstration dans la méthode onCreate de mon activité principale.
Problème : l'activité principale n'est pas visible en arrière-plan, elle est simplement noire. J'ai essayé les solutions suivantes aquí mais ça n'a pas réglé le problème.
Existe-t-il une meilleure approche pour créer quelque chose comme ça, ou suis-je sur la bonne voie ?
J'avais également une autre question connexe qui dépend de la façon dont cette solution est mise en œuvre. J'essaie de superposer du texte et des flèches de manière à ce qu'ils pointent vers des composants particuliers de l'interface utilisateur en arrière-plan. Si j'utilise un fichier PNG contenant le texte et les flèches, il est probable qu'il ne sera pas mis à l'échelle correctement sur différents appareils. En d'autres termes, les flèches ne pointeront pas nécessairement vers le bon composant de l'interface utilisateur en arrière-plan. Existe-t-il un moyen de résoudre ce problème ?
Merci !
Voici mon code pour la première tentative :
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);
}
}