Comment voulez-vous créer un transparent écran démo d'une application Android?
Je suis en train de créer une semi-transparent démo de l'écran qui est lancé uniquement lorsqu'un utilisateur installe mon application. Voici un exemple de l'Impulsion application de News:
Galaxy Nexus
Nexus One
Au lieu d'un "tap-to-rejeter de', je veux que l'utilisateur soit en mesure de passer à travers un couple de ces transparente des pages de démonstration.
Pour ma première tentative, j'ai modifié un échantillon de la ViewPagerIndicator de la bibliothèque. J'ai utilisé de la semi-transparence des Png dans ImageViews l'intérieur de chacun de la vue pager de fragments. J'ai ensuite lancé la présente comme une "démonstration de l'activité" dans la méthode onCreate de mon activité principale.
Problème: L'activité principale n'a pas pu être vu dans le fond - à la place, il était tout noir. J'ai essayé les solutions ici, mais qui n'a pas de résoudre le problème.
Est-il une meilleure approche de la création de quelque chose comme cela, ou suis-je sur la bonne voie?
J'avais aussi une autre question connexe, qui dépend de la façon dont cela est mis en œuvre. Je suis en train de superposition de texte et les flèches tels qu'ils pointent en particulier les composants de l'INTERFACE utilisateur dans l'arrière-plan. En utilisant une image PNG qui a le texte et les flèches, il est probable qu'il ne sera pas à l'échelle correctement sur différents appareils. I. e., les flèches ne peuvent pas nécessairement le point de le bon composant de l'INTERFACE utilisateur dans l'arrière-plan. Est-il un moyen de remédier à 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);
}
}
- Sans regarder ton code il est difficile de suggérer quoi que ce soit. Si vous pouviez mettre votre code d'activité, il pourrait aider.
- juste de l'ajouter.
- c'est une bonne Question.
Vous devez vous connecter pour publier un commentaire.
Mettre votre démo info dans une autre activité et lui donner le thème suivant.
Si vous utilisez ActionBarSherlock changement
parent
à@style/Theme.Sherlock
.Cela vous donnera une transparence de l'activité, de sorte que vous serez en mesure de voir l'activité en dessous.
Maintenant, je suppose que vous voulez un translucide arrière-plan, trop.
Dans le fichier xml de mise en page (de votre transparent activité) ajouter:
Les 6 derniers chiffres de définir la couleur: 000000 est noir.
Les 2 premiers définir l'opacité: 00 est 100% transparent, ff est 100% opaque. Afin de choisir quelque chose entre les deux.
findViewById
). Puis obtenir sa position par rapport à la racine de la mise en page à l'aide de cette méthode. Envoyez la position de la superposition de l'activité dans l'intention. Faire le bon alignement.View.getLocationOnScreen(int[] location)
ouView.getLocationInWindow(int[] location)
. Je ne suis pas sûr que l'on est mieux.RelativeLayout
, suffirait.Avez-vous regardé ShowcaseView? https://github.com/Espiandev/ShowcaseView.
En utilisant ceci:
Pouls à l'aide d'un RelativeLayout avec quatre ImageView et quatre TextView est.
Le texte dans la capture d'écran est tout TextView avec leur propre police personnalisée.
Dans votre Manifeste, ajoutez les lignes suivantes à votre Activité:
android:thème="@style/Thème.Transparent">
À votre extérieur RelativeLayout ajouter:
android:background="#aa000000"
À votre styles.xml fichier:
Un exemple de comment le programme personnalisé de police vous pouvez le trouver à:
https://github.com/commonsguy/cw-android/tree/master/Fonts/FontSampler/
La mise en page à partir de la Hiérarchie de la Visionneuse ressemble à ceci (la boîte rouge est le RelativeLayout conteneur):
Pour cela, vous devez créer une aide mise en page en bas de votre page principale
ex:(structure)
Envelopper votre page principale dans un
RelativeLayout
, puis ajouter une deuxième mise en page pour que, quelque chose comme:Je crois que la superposition de la mise en page passe en dessous de la page principale dans le fichier XML (si ma mémoire est bonne). Vous pouvez alors faire votre propre mise en page,
ViewFlipper
, tout ce que vous voulez à l'intérieur de cette deuxième mise en page.RelativeLayout
à lademo_activity.xml
fichier? Et estDemoActivity
votre principale (premier)Activity
?Faire une nouvelle Activité (disons Tutoriel).
Aller à votre Activité de la présentation du fichier xml (activity_tutorial).
En vertu de la mère de mise en page, ajouter "android:background= #000" et "android:alpha= "0.5"
HTML:
Maintenant, allez à fichier de manifeste d'application et sous votre tutoriel activité d'ajouter l'attribut android:thème="@android:style/Thème.Translucide.NoTitleBar">
HTML:
C'est ça, maintenant exécuter cette activité sur le dessus de toute autre activité, et vous pouvez obtenir les résultats souhaités.
Personnaliser, ajouter du texte, imageviews et d'autres choses pour obtenir de votre choix à l'écran de tutoriel.
Persuadé que vous pouvez faire un viewpager travailler avec cette technique.
Vous pourriez simplement sur Android lanceur de code, comme ils le font. Je ne sais pas, la mise en œuvre.
Si c'était moi, je voudrais (si c'est juste une simple superposition) si vous n'avez pas de vis à votre disposition pour votre application, il suffit de créer votre superposition de mise en page, et l'attacher sur ur la disposition d'application en l'ajoutant directement avec vos activités
WindowManager
. Pourrait être aussi simple que l'ajout d'unImageView
à laWindowManager
, écouter les touches sur leImageView
, ou ont un délai d'attente pour supprimer leImageView
de votreWindow
.