0

見えないレイアウトの更新/ペイントを強制する方法を知っている人はいますか?

複雑なアプリケーションがあり、現時点ではレイアウトの1つが表示されない可能性がありますが、それをビットマップに変換して、別の小さく、拡大縮小された、表示可能なレイアウトで表示したいと思います。

レイアウトをビットマップに簡単にコピーして、そのビットマップを小さい表示ウィンドウのImageViewに配置できます。しかし、私たちが直面している問題は、非表示のウィンドウでビューが変更、削除、または追加されている場合、Androidが実際にそれをペイントしていないことです。したがって、小さい表示レイアウトに配置されるフェッチされたビットマップは古く、静的です。

では、非表示のレイアウトに再描画を強制する方法はありますか?

4

1 に答える 1

0

機能を拡張LinearLayoutおよびオーバーライドしonMeasure、フルレイアウトサイズ(オンスクリーン+オフスクリーン)を返します。このレイアウトを非表示のレイアウトとして使用します

このコードはあなたを始めるかもしれません。

public class YourLayout extends LinearLayout {
  private Context myContext;

  public YourLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    /*
     *  Magic!!!  Android doesn't draw parts of layout which is offscreen. Since YourLinear layout has some offscreen part
     *  its offscreen portions didn't get drawn. 
     *  This onMeasure function determines how much pixel of a layout need to be drawn. 
     *  widthMeasureSpec        ->  Width of YourLayout onscreen
     *  heightMeasureSpec       ->  height of YourLayout on screen
     *  your_view_offscreen_width   ->  width of offscreen part
     *  your_view_offscreen_height->   height of offscreen part
     *  So heightMeasureSpec + your_view_offscreen_height draws complete height of YourLayout whether it is onscreen or offscreen. 
     *  So widthMeasureSpec + your_view_offscreen_width draws complete width of YourLayout whether it is onscreen or offscreen
     */
      super.onMeasure(widthMeasureSpec + your_view_offscreen_width, heightMeasureSpec + your_view_offscreen_height);
   }
}

これで、このレイアウトを非表示のレイアウトとして使用できます。つまり、xmlを使用してレイアウトしている場合は、次のように使用できます。

 <com.your.package.YourLayout layout_width="fill_parent" layout_height="fill_parent"
  ......
 >
于 2012-05-31T03:42:01.197 に答える