106

ユーザーが最初にアプリケーションをインストールしたときにのみ起動される半透明のデモ画面を作成しようとしています。以下は、Pulse News アプリの例です。

ギャラクシー ネクサス

Galaxy Nexus の Pulse News のスクリーンショットの例

ネクサス ワン

ここに画像の説明を入力

「タップして閉じる」機能の代わりに、ユーザーがそのような透明なデモページをいくつかスワイプできるようにしたいと考えています。

初めての試みとして、ViewPagerIndicatorライブラリのサンプルを変更しました。ビューページャーの各フラグメント内の ImageView で半透明の PNG を使用しました。次に、これを「メイン アクティビティ」の 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();
        }
    } }

デモフラグメント.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);
    }
}
4

8 に答える 8

80

デモ情報を別のアクティビティに入れて、次のテーマを指定します。

<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% 不透明です。その中から何かを選んでください。

于 2012-08-30T07:54:05.447 に答える
65

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);
于 2012-09-04T09:56:45.243 に答える
11

Pulse は、4 つの ImageView と 4 つの TextView を持つ RelativeLayout を使用しています。スクリーン ショットのテキストはすべて、独自のカスタム フォントを使用した TextView のものです。

マニフェストで、以下をアクティビティに追加します。

android:theme="@style/Theme.Transparent">

外側の RelativeLayout に次を追加します。

android:background="#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/

Hierarchy Viewer からのレイアウトは次のようになります (赤いボックスは RelativeLayout コンテナーです)。

ここに画像の説明を入力

于 2012-11-11T17:16:34.900 に答える
5

このためには、メイン レイアウト ex:(structure) の下部にヘルプ レイアウトを作成する必要があります。

<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>
于 2015-07-31T07:07:09.633 に答える
2

メイン レイアウトを でラップRelativeLayoutし、次のような 2 番目のレイアウトを追加します。

<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次に、この 2 番目のレイアウト内で、好きなように独自のレイアウトを作成できます。

于 2012-08-17T21:29:09.860 に答える
0

彼らが行っているように、Androidランチャーコードをチェックアウトすることができます. 私は実装を知りません。

それが私だったら (単純なオーバーレイの場合)、アプリケーションのレイアウトを台無しにしないで、オーバーレイ レイアウトを作成し、それをアクティビティに直接追加してアプリケーション レイアウトにアタッチしますWindowManagerImageViewに を追加しWindowManagerたり、 のタッチをリッスンしImageViewたり、タイムアウトを設定して から を削除したりするのImageViewと同じくらい簡単Windowです。

于 2012-08-17T21:54:40.520 に答える