Android - Отображение предварительного просмотра деятельности / просмотра содержимого - PullRequest
1 голос
/ 15 июля 2011

Я создаю приложение для 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.

Итак, кто-нибудь еще делает нечто подобное с предварительным просмотром того, как будет выглядеть другое действие, и как вы его выполнили? Я просто иду по совершенно неправильному пути? Я погуглил повсюду, и часть меня чувствует, что кто-то должен был решить эту проблему раньше, но я потерял целый день работы над этим, и я просто не могу потратить на это гораздо больше времени прямо сейчас.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 17 августа 2016

Если я получаю правильно, вы хотите разместить миниатюру в своей активности, которая фактически является предварительным просмотром активности, которая будет открыта при нажатии этой миниатюры ImageView.

  1. Самый первый раз, когда вы можете иметь изображение по умолчанию, представляющее активность.
  2. В следующий раз, то есть после того, как вы откроете это действие, вы можете получить снимок экрана с вашим действием: Сделайте скриншот всего представления
  3. Сделайте миниатюру и замените предыдущую миниатюру этой.
0 голосов
/ 14 сентября 2011

Вам нужно подождать, пока представление отобразится на экране, затем вы можете попросить его нарисовать себя на любом холсте.Если представление не отображается на экране, оно создаст пустое изображение 0x0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...