我有一个需要垂直翻转或镜像的视图。有很多关于通过将单个位图缩放 -1 并转换偏移量来镜像单个位图的信息,如此处所述,但似乎没有任何关于如何绘制视图的所有内容的信息 - 具体来说,所有它的子视图 - 颠倒。
我在这个容器中有多个子视图 - 文本、图像 - 我希望有一种方法可以让我将它们添加到单个视图中并颠倒/横向绘制该视图,而不是让它们都执行自定义绘图代码来绘制将它们倒置并让容器适当地重新定位它们。有任何想法吗?
我有一个需要垂直翻转或镜像的视图。有很多关于通过将单个位图缩放 -1 并转换偏移量来镜像单个位图的信息,如此处所述,但似乎没有任何关于如何绘制视图的所有内容的信息 - 具体来说,所有它的子视图 - 颠倒。
我在这个容器中有多个子视图 - 文本、图像 - 我希望有一种方法可以让我将它们添加到单个视图中并颠倒/横向绘制该视图,而不是让它们都执行自定义绘图代码来绘制将它们倒置并让容器适当地重新定位它们。有任何想法吗?
Canvas
您可以简单地从 a创建一个Bitmap
然后调用您的根视图的View.draw(Canvas)
方法。这将为您提供视图层次结构的快照Bitmap
。然后,您应用上述转换来镜像图像。
将视图转换为位图,然后使用以下方法将其翻转:
private static Bitmap getBitmapFromView(View view,int width,int height) {
int widthSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
view.measure(widthSpec, heightSpec);
view.layout(0, 0, width, height);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
private static Bitmap flipBitmap(Bitmap src)
{
Matrix matrix = new Matrix();
matrix.preScale(-1, 1);
Bitmap dst = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, false);
dst.setDensity(DisplayMetrics.DENSITY_DEFAULT);
return dst;
}