【发布时间】:2016-01-30 10:46:43
【问题描述】:
因此,在 oncreate 期间并不是真的希望这样做,尽管我认为我想要使用的动画在图像而不是 FrameLayout 上会更好地工作。
所以到目前为止我想到的是(通过阅读https://stackoverflow.com/a/4406090/1815624),使用 ViewTreeObserver 我可以在底部显示的函数中使用 getHeight,这是错误发生的地方,它指出 view.getWidth(), view.getHeight()
真的,我只是想获得该视图的图像并使用removePieChart(fl); 之类的内容对原始图像进行核对尽管我一使用removePieChart(fl); 就会发生错误...
定时事件可能会起作用,但这似乎是个坏主意……有什么建议吗?
请,谢谢
protected void onCreate(Bundle savedInstanceState) {
final FrameLayout tv = (FrameLayout)findViewById(R.id.pieChart);
final ViewTreeObserver observer= tv.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
View fl = findViewById(R.id.pieChart);
image.setImageBitmap(viewToBitmap(fl));
removePieChart(fl);
// observer.removeOnGlobalLayoutListener(this);
}
});
}
private void removePieChart(View fl) {
((ViewManager)fl.getParent()).removeView(fl);
}
这里是来自https://stackoverflow.com/a/21726101/1815624的viewToBitmap方法供参考
public Bitmap viewToBitmap(View view) {
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
try {
FileOutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + "/file.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
【问题讨论】:
-
可能对你有用 fl.getMeasuredHeight()
-
我试过了,但没有用...谢谢您的建议..还有吗?
-
onCreate()中还没有创建好视图,所以大多数情况下你会得到 0。 -
您无法移除尚未添加的视图
-
知道这是首先使用监听器的原因,因为我需要它被渲染复制和销毁......