Wie erstelle ich einen transparenten Demo-Bildschirm für eine Android-App?

Ich versuche, einen halbtransparenten Demo-Bildschirm zu erstellen, der nur gestartet wird, wenn ein Benutzer meine Anwendung zum ersten Mal installiert. Hier ist ein Beispiel aus der Pulse News App:

Nexus Galaxie

Nexus One

Ich möchte, dass der Benutzer anstelle einer Funktion "Tippen zum Entlassen" durch einige dieser transparenten Demoseiten blättern kann.

Für meinen ersten Versuch habe ich ein Beispiel aus dem geändertViewPagerIndicator Bibliothek. Ich habe halbtransparente PNGs in ImageViews in jedem Fragment des View-Pagers verwendet. Ich habe dies dann als 'Demo-Aktivität' in der onCreate-Methode meiner 'Hauptaktivität' gestartet.

Problem: Die 'Hauptaktivität' war im Hintergrund nicht zu sehen - stattdessen war sie nur schwarz. Ich habe die Lösungen ausprobiertHier, aber das hat das Problem nicht behoben.

Gibt es einen besseren Ansatz, um so etwas zu erschaffen, oder bin ich auf dem richtigen Weg?

Ich hatte auch eine andere verwandte Frage, die davon abhängt, wie dies umgesetzt wird. Ich versuche, Text und Pfeile so zu überlagern, dass sie auf bestimmte UI-Komponenten im Hintergrund verweisen. Bei Verwendung eines PNG mit Text und Pfeilen ist es wahrscheinlich, dass es auf verschiedenen Geräten nicht richtig skaliert wird. Das heißt, die Pfeile müssen nicht unbedingt auf die richtige UI-Komponente im Hintergrund verweisen. Gibt es auch eine Möglichkeit, dieses Problem anzugehen?

Vielen Dank!

Hier ist mein Code für den ersten Versuch:

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);
    }
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage