【问题标题】:Android: Mirroring a ViewAndroid:镜像视图
【发布时间】:2012-09-13 01:38:22
【问题描述】:

我有一个视图需要垂直翻转或镜像。如here 所述,有很多关于通过-1 缩放单个位图并转换偏移量来镜像单个位图的信息,但似乎没有任何关于如何绘制视图的所有内容的信息 -具体来说,它的所有子视图 - 颠倒。

我在这个容器中有多个子视图 - 文本、图像 - 我希望有一种方法可以让我将它们添加到单个视图中并颠倒/横向绘制该视图,而不是让它们都执行自定义绘图代码将它们倒置并让容器适当地重新定位它们。有什么想法吗?

【问题讨论】:

    标签: android android-view


    【解决方案1】:

    您可以简单地从Bitmap 创建一个Canvas,然后调用您的根视图的View.draw(Canvas) 方法。这将为您提供Bitmap 中视图层次结构的快照。然后应用上述转换来镜像图像。

    【讨论】:

    • 我想以这种方式使用它我需要在任何更改时重新创建位图,例如按钮进入/离开突出显示状态?
    • Xono,没错。尽管如果您确切知道发生了什么变化,那么借助一些数学运算,您只需重新绘制包含变化的矩形。然而,这并非微不足道。
    • 对于这种情况听起来有点矫枉过正,这只会在着陆/着陆时更新。但是,一个可能的问题是:由于此视图包含按钮,因此视图上的输入是否也必须进行调整?简单地翻转渲染的内容不会改变实际按钮的位置,所以触摸不会转到视图的错误部分吗?
    【解决方案2】:

    把View转成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;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2011-12-17
      • 2019-08-10
      相关资源
      最近更新 更多