Я пытаюсь создать полупрозрачный демонстрационный экран, который запускается только тогда, когда пользователь впервые устанавливает мое приложение. Вот пример из приложения Pulse News:
Galaxy Nexus
Nexus One
Вместо функции «коснитесь, чтобы закрыть» я хочу, чтобы пользователь мог пролистывать пару таких прозрачных демонстрационных страниц.
Для своей первой попытки я модифицировал образец из библиотеки ViewPagerIndicator . Я использовал полупрозрачные PNG в ImageViews внутри каждого из фрагментов пейджера просмотра. Затем я запустил это как «демонстрационное действие» в методе onCreate моего «основного действия».
Проблема: «Основное действие» не было видно на заднем плане - оно было просто черным. Я попробовал решения здесь , но это не устранило проблему.
Есть ли лучший подход к созданию чего-то подобного, или я на правильном пути?
У меня также был еще один связанный с этим вопрос, который зависит от того, как это реализовано. Я пытаюсь наложить текст и стрелки так, чтобы они указывали на определенные компоненты пользовательского интерфейса в фоновом режиме. При использовании PNG с текстом и стрелками он, скорее всего, не будет правильно масштабироваться на разных устройствах. То есть стрелки не обязательно указывают на правильный компонент пользовательского интерфейса в фоновом режиме. Есть ли способ решить и эту проблему?
Спасибо!
Вот мой код для первой попытки:
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);
}
}
Ответы:
Поместите вашу демонстрационную информацию в другое задание и задайте ему следующую тему.
Если вы используете ActionBarSherlock, измените его
parent
на@style/Theme.Sherlock
.Это даст вам прозрачную активность, так что вы сможете видеть активность под ней.
Думаю, вам тоже нужен полупрозрачный фон.
В макете xml (вашей прозрачной активности) добавьте:
Последние 6 цифр определяют цвет: 000000 - черный.
Первые 2 определяют непрозрачность: 00 - 100% прозрачность, ff - 100% непрозрачность. Так что выбирайте что-то среднее.
источник
findViewById
). Затем с помощью этого метода определите его положение относительно корневого макета . Отправить позицию для наложения активности в намерении. Сделайте правильное выравнивание.View.getLocationOnScreen(int[] location)
илиView.getLocationInWindow(int[] location)
. Я не уверен, какой из них лучше.RelativeLayout
.Вы смотрели ShowcaseView? https://github.com/Espiandev/ShowcaseView .
Используя это:
источник
Pulse использует RelativeLayout с четырьмя ImageView и четырьмя TextView. Текст на снимке экрана - это все TextView со своим собственным шрифтом.
В своем манифесте добавьте к своей деятельности следующее:
android: theme = "@ style / Theme.Transparent">
Во внешний RelativeLayout добавьте:
android: background = "# aa000000"
В ваш файл styles.xml:
Пример программирования пользовательского шрифта можно найти по адресу:
https://github.com/commonsguy/cw-android/tree/master/Fonts/FontSampler/
Макет из средства просмотра иерархии выглядит следующим образом (красное поле - это контейнер RelativeLayout):
источник
источник
Для этого вам нужно создать макет справки внизу основного макета, например: (структура)
источник
Оберните основной макет в a
RelativeLayout
, затем добавьте к нему второй макет, например:Я считаю, что макет наложения располагается ниже основного макета в XML-файле (если не изменяет память). Затем вы можете создать свой собственный макет
ViewFlipper
, все, что захотите, во втором макете.источник
RelativeLayout
вdemo_activity.xml
файл? АDemoActivity
ваш главный (первый)Activity
?Создайте новое действие (например, Учебник).
Перейдите в xml-файл макета вашей деятельности (activity_tutorial). Под родительским макетом добавьте android: background = # 000 и android: alpha = "0.5".
Теперь перейдите в файл манифеста приложения и в разделе учебного курса добавьте атрибут android: theme = "@ android: style / Theme.Translucent.NoTitleBar">
Вот и все, теперь запустите это действие поверх любого другого, и вы можете получить желаемые результаты. Настройте, добавьте текст, просмотры изображений и другие вещи, чтобы получить желаемый экран учебника. Совершенно уверен, что вы можете заставить работать просмотрщик с помощью этой техники.
источник
Вы можете просто проверить код запуска Android, как они это делают. Не знаю там реализации.
Если бы это был я, я бы (если бы просто наложение), чтобы вы не ошиблись с макетом для своего приложения, просто создайте макет наложения и прикрепите его к макету вашего приложения, добавив его непосредственно в свои действия
WindowManager
. Это может быть так же просто, как добавить aImageView
вWindowManager
, прослушать касанияImageView
или иметь тайм-аут, чтобы удалитьImageView
из вашегоWindow
.источник