当前位置: 代码迷 >> Android >> 怎么将一布局转换为Bit地图?
  详细解决方案

怎么将一布局转换为Bit地图?

热度:59   发布时间:2016-04-28 03:48:32.0
如何将一布局转换为Bitmap??
部分代码如下:

public class MainActivity extends Activity {
protected static Bitmap bmp = null;
private LinearLayout ll;
private Button bt;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("1***", MainActivity.bmp + "");
// 该线性布局中有两个ImageView、一个TextView
ll = (LinearLayout) findViewById(R.id.ll);
bt = (Button) findViewById(R.id.next);
bmp = ll.getDrawingCache();// 将线性布局中的整个内容转换为位图
Log.d("2***", MainActivity.bmp + "");
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent it = new Intent(MainActivity.this, TwoActivity.class);
startActivity(it);
}
});
}

}



以下是Log日志






bmp = ll.getDrawingCache();// 将线性布局中的整个内容转换为位图
看来这样不能将这个线性布局转换为Bitmap的对象,请问一下大家有什么别的方法啊??

------解决思路----------------------
引用:
部分代码如下:

public class MainActivity extends Activity {
protected static Bitmap bmp = null;
private LinearLayout ll;
private Button bt;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("1***", MainActivity.bmp + "");
// 该线性布局中有两个ImageView、一个TextView
ll = (LinearLayout) findViewById(R.id.ll);
bt = (Button) findViewById(R.id.next);
bmp = ll.getDrawingCache();// 将线性布局中的整个内容转换为位图
Log.d("2***", MainActivity.bmp + "");
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent it = new Intent(MainActivity.this, TwoActivity.class);
startActivity(it);
}
});
}

}



以下是Log日志






bmp = ll.getDrawingCache();// 将线性布局中的整个内容转换为位图
看来这样不能将这个线性布局转换为Bitmap的对象,请问一下大家有什么别的方法啊??


CACHE
 是在显示之后才有,也就是说不能在onCreate里 用CACHE。

建议这么写:
mCenter.buildDrawingCache();
mCenter.setDrawingCacheEnabled(true);
Bitmap b1 = mCenter.getDrawingCache(); 
mCenter.setDrawingCacheEnabled(false);
mCenter.destroyDrawingCache();

------解决思路----------------------
引用:
Quote: 引用:

CACHE
 是在显示之后才有,也就是说不能在onCreate里 用CACHE。

建议这么写:
mCenter.buildDrawingCache();
mCenter.setDrawingCacheEnabled(true);
Bitmap b1 = mCenter.getDrawingCache(); 
mCenter.setDrawingCacheEnabled(false);
mCenter.destroyDrawingCache();


谢谢,我按照你给我的方法改成了这样:
public class MainActivity extends Activity {
protected static Bitmap bmp = null;
private LinearLayout ll;
private Button bt;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("1***", MainActivity.bmp + "");
// 该线性布局中有两个ImageView、一个TextView
ll = (LinearLayout) findViewById(R.id.ll);
bt = (Button) findViewById(R.id.next);
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
ll.buildDrawingCache();
ll.setDrawingCacheEnabled(true);
bmp = ll.getDrawingCache();// 将线性布局中的整个内容转换为位图
Log.d("2***", MainActivity.bmp + "");
ll.setDrawingCacheEnabled(false);
ll.destroyDrawingCache();
Intent it = new Intent(MainActivity.this, TwoActivity.class);
startActivity(it);
}
});
}
}


Log日志里面也显示有对象了




但是跳往下一界面时,我明明设置了iv.setImageBitmap(MainActivity.bmp);却仍旧是白板。这该如何处理啊??

public class TwoActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(MainActivity.bmp);
Log.d("3***", MainActivity.bmp + "");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.two, menu);
return true;
}

}



destroyDrawingCache 先去掉。我这么写是因为我取到之后就使用完了,中间使用bitmap的代码我去掉了。

要是下个界面的话,把bitmap 传递过去就好了,要是传递过去为null,就先copy到native 层的内存里。要用的时候再取就行了。
  相关解决方案