我正在构建一个类似电子书的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活动就会消失。我暂时修补了一段时间,发现我没有掌握一些UI约束,然后意识到显示的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中操纵UI。
所以,有没有其他人做类似的事情预览另一个活动会是什么样子,你是如何完成它的?我只是走错了路吗?我已经在各处搜索了一下,部分我感觉有人必须先解决这个问题,但我已经失去了一天的工作时间,而且我现在不能再投入更多的时间了。
感谢您的帮助。
答案 0 :(得分:0)
您必须等到视图在屏幕上呈现,然后您可以要求它在任何画布上绘制自己。如果视图未在屏幕上显示,则会创建一个空的0x0图像。
答案 1 :(得分:0)
如果我输入正确,您希望在活动上放置一个缩略图,该缩略图实际上是在点击此缩略图ImageView时将打开的活动的预览。