Я создаю приложение для Android, которое будет похоже на электронную книгу. Стандартное пролистывание страниц, просмотр изображений и т. Д. Одним из требований является то, что в нескольких местах вы увидите предварительный просмотр того, как будет выглядеть страница. Это будет точное содержимое этой страницы, только в меньшем размере.
Я не могу получить от этого предварительного просмотра работу, в которой я нуждаюсь. Я закодировал действие, которое будет отображать элементы управления для воспроизведения аудио или видео в зависимости от некоторых значений, переданных в дополнениях. Это отлично работает. Предварительным просмотром должно быть это упражнение, но только в меньшем размере, которое должно отображаться в отдельном упражнении. Вот то, что я попытался показать уменьшенную версию упражнения:
Сначала я наткнулся на плохо документированный объект ActivityGroup. Я подумал, что мог бы использовать это для вызова действия, а затем получить представление и как-то выбросить его в родительское представление. Вот как выглядел этот код:
public class GroupTest extends ActivityGroup {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grouptest);
LocalActivityManager manager = getLocalActivityManager();
Intent intent = new Intent();
intent.setClass(getBaseContext(), ViewElement.class);
intent.putExtra("ElementID", 22);
intent.putExtra("PackID", 10);
Window w = manager.startActivity("videoelement", intent);
View v = w.getDecorView();
// Grab the table and add a view to it.
TableLayout tl = (TableLayout)findViewById(R.id.tlTest);
TableRow tr = new TableRow(this);
tr.addView(v);
tl.addView(tr);
}
}
А вот как выглядела понравившаяся раскладка:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1"
android:id="@+id/tlTest">
</TableLayout>
Этот вид работал. Действие ViewElement действительно отображалось в действии GroupTest. Проблема заключалась в том, что всякий раз, когда я пытался добавить что-то еще в таблицу (например, метку), действие ViewElement исчезало. Некоторое время я возился с этим, полагая, что мне не удается понять некоторые ограничения пользовательского интерфейса, затем понял, что отображаемое действие ViewElement имеет кнопки, которые можно нажимать, а это не то, чего я действительно хочу. Я просто хочу посмотреть, как выглядит эта страница, и не иметь возможности взаимодействовать с ней.
Так что я попробовал другой подход. Нашел эту страницу при сохранении вида на изображение: http://jtribe.blogspot.com/2008/12/saving-view-as-image-with-android.html. Похоже, что я хочу.
Мой модифицированный код теперь выглядит так:
public class GroupTest extends ActivityGroup {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tocrow);
LocalActivityManager manager = getLocalActivityManager();
Intent intent = new Intent();
intent.setClass(getBaseContext(), ViewElement.class);
intent.putExtra("ElementID", 22);
intent.putExtra("PackID", 10);
Window w = manager.startActivity("videoelement", intent);
View v = w.getDecorView();
Bitmap image = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
v.draw(new Canvas(image));
ImageView img = (ImageView)findViewById(R.id.ivwElementPreview);
img.setImageBitmap(image);
}
}
И макет (это фактический макет, в который я поместил бы превью, если бы я мог заставить его работать):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
android:id="@+id/ivwElementPreview"
android:layout_width="75px"
android:layout_height="75px"
android:layout_marginRight="6dip"
android:src="@drawable/icon" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/txtElementTitle"
android:layout_width="300px"
android:layout_height="0dip"
android:layout_weight="1"
/>
<ImageView
android:id="@+id/ivwPackIcon"
android:layout_width="15px"
android:layout_height="15px"
android:layout_marginRight="6dip"
android:src="@drawable/icon" />
<ImageView
android:id="@+id/ivwPackIcon"
android:layout_width="15px"
android:layout_height="15px"
android:layout_marginRight="6dip"
android:src="@drawable/icon" />
<TextView
android:id="@+id/txtElementComments"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
</LinearLayout>
</LinearLayout>
Это просто не работает вообще. Насколько я могу судить, вызов w.getDecorView () не возвращает представление, которое на самом деле имеет какие-либо свойства высоты, ширины или отрисовки. Если я запускаю этот код, я получаю ошибку «ширина и высота должны быть> 0». И если я добавляю значения для ширины и высоты, ничего не отображается, кроме черного изображения. Затем я приступил к созданию простых вещей, таких как TextView, и нарисовал его на растровом изображении для отображения в моем LinearLayout, но так и не смог заставить его работать правильно. Я на грани того, чтобы просто сыт по горло манипулированием пользовательским интерфейсом в Android.
Итак, кто-нибудь еще делает нечто подобное с предварительным просмотром того, как будет выглядеть другое действие, и как вы его выполнили? Я просто иду по совершенно неправильному пути? Я погуглил повсюду, и часть меня чувствует, что кто-то должен был решить эту проблему раньше, но я потерял целый день работы над этим, и я просто не могу потратить на это гораздо больше времени прямо сейчас.
Спасибо за любую помощь.