我正在使用ViewPager作为应用程序中的主导航。我也在使用ActionBar。我想要实现的是,当用户点击ActionBar中的搜索按钮时,我希望背景模糊。所以我的方法是截取屏幕截图,模糊它,设置为ImageView并在整个视图中显示为叠加层。它有效。但问题是,实际上当我第一次打开搜索时,它会显示正确的截图。然后我关闭叠加,更改ViewPager
中的页面,再次单击搜索...我可以看到上一个屏幕截图 - 不是新页面上的新页面。以下是我的代码片段:
在搜索点击上显示和隐藏叠加层(我正在传递R.id.container
视图,这是我的内容视图的父ID,menuOverlay是我从布局引用的ImageView
这是我拍摄屏幕截图并使其模糊的方法
//广告1 item.setOnActionExpandListener(new MenuItem.OnActionExpandListener(){ @覆盖 public boolean onMenuItemActionExpand(MenuItem menuItem){ if(menuItem.getItemId()== R.id.action_search){
menuOverlay.setImageBitmap(Utils.takeSnapshot(findViewById(R.id.container)));
menuOverlay.setVisibility(View.VISIBLE);
}
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
if(menuItem.getItemId() == R.id.action_search) {
menuOverlay.setVisibility(View.GONE);
}
return true;
}
});
// Ad. 2
public static Bitmap takeSnapshot(View v) {
v.setDrawingCacheEnabled(true);
v.buildDrawingCache();
Bitmap bm = v.getDrawingCache();
Bitmap scaled = Bitmap.createScaledBitmap(bm, bm.getWidth()/5, bm.getHeight()/5, false);
return Utils.fastblur(scaled, 5);
}
我使用快速模糊算法在StackOverflow上找到了一个非常快的地方。 哪里有问题?为什么会这样?
答案 0 :(得分:0)
v.setDrawingCacheEnabled(false);