2011-07-14 17 views
1

私はeBookのようなAndroidアプリケーションを構築しています。標準のフリップスルー・ページ、ビュー・イメージなど。要件の1つは、複数の場所で、ページの外観をプレビューすることです。それはちょうど小さいサイズで、そのページの正確な内容になります。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

ビューが画面にレンダリングされるまで待たなければならないので、キャンバスにペイントするように要求することができます。ビューが画面に表示されない場合は、空の0x0イメージが作成されます。

0

正しく取得されている場合、実際にこのサムネイルImageViewがクリックされたときに開くアクティビティのプレビューであるサムネイルをアクティビティに配置します。

  1. アクティビティを表すデフォルト画像を初めて作成することができます。
  2. 次回、それはあなたがこのアクティビティを開いた後、あなたがあなたの活動のスクリーンショットを取得することができます: Take a screenshot of a whole View
  3. サムネイルを作成し、これで前のサムネイルを交換してください。
関連する問題