【问题标题】:Android - flip image in xmlAndroid - 在 xml 中翻转图像
【发布时间】:2012-02-18 04:09:25
【问题描述】:

我想在 xml 中翻转按钮背景的图像。我已经看到了如何做到这一点的示例,但它是以编程方式:http://xjaphx.wordpress.com/2011/06/26/image-processing-image-flipping-mirroring。 无论如何,我有一个 xml 文件(button_left_state.xml),如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
<item android:state_pressed="true" >
    <rotate android:fromDegrees="180.0" android:toDegrees="180.0" 
    android:pivotX="50%" android:pivotY="50%" android:drawable="@drawable/buttonrightpressed" />    
</item>    

<item>
  <rotate android:fromDegrees="180.0" android:toDegrees="0.0" 
    android:pivotX="50%" android:pivotY="50%" android:drawable="@drawable/buttonright"/>
</item>   
</selector>

但此代码只是将图像旋转 180 度。 xml中可以翻转图片吗?

【问题讨论】:

  • 你试过我的链接了吗?
  • 这有什么好运气吗?我遇到了同样的问题。我有一个带有渐变的箭头按钮。我翻转它,使箭头朝向另一个方向,几乎使用相同的 代码。但是,现在我的渐变是颠倒的。
  • 见下文。我发布了答案。

标签: android


【解决方案1】:

在 ImageView 中使用 scale 属性

android:scaleX="-1" //To flip horizontally or
android:scaleY="-1" //To flip vertically

【讨论】:

  • 不显示为在预览中工作,但在设备上工作,谢谢
  • 这太优雅了,帮助我解决了不对称小部件背景上的 RTL 镜像问题。
  • 这也会反转内容(如果是布局)
  • 阴影也是倒置的。如果在 FAB 中使用,阴影会出现在顶部
  • 不错,谢谢
【解决方案2】:

这是一个非常简短且易于理解的解决方案。

将此添加到 imageView:

 android:rotationX="180"

这将水平翻转imageView(左右)。

对于垂直,把这个:

android:rotationY="180"

例子:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="original image:"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/test"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="flip horizontally :"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:rotationY="180"
        android:src="@drawable/test"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="flip vertically:"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:rotationX="180"
        android:src="@drawable/test"/>

</LinearLayout>

结果(图片取自JNI library that I've made,可以通过 JNI 实现):

【讨论】:

  • 这仅适用于对称图像。旋转不等于翻转/镜像图像!!
  • @muetzenflo 更新了答案,包括屏幕截图。请注意,它确实有效
  • 酷,我没有意识到可以在 3D 轴上旋转。感谢您的努力
【解决方案3】:

我使用layer-list解决了我的问题:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item >
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
            <item>
                <shape android:shape="rectangle">
                    <gradient android:startColor="#9f9" android:centerColor="#000"
                        android:endColor="#0f0" android:angle="-90" />
                    <stroke android:width="1.0px" android:color="#444" />
                    <corners android:bottomRightRadius="7dip"
                        android:bottomLeftRadius="0.1dp"
                        android:topLeftRadius="0.1dp"
                        android:topRightRadius="7dip"/>
                </shape>
            </item>
            <item>
                <rotate android:fromDegrees="180.0" android:toDegrees="180.0"
                    android:pivotX="50%" android:pivotY="50%" android:drawable="@drawable/arrow_right" />
            </item>
        </layer-list>
    </item>
</selector>

【讨论】:

  • @LoungeKatt,首先,看看答案日期。自从我发布我的问题将近一年后,给出了最好的一个。
  • 您似乎同意 stackoverflow.com/a/20565940/461982 在接受您自己之前提供的答案是可接受的答案,因此这对未来的读者来说是很好的信息。
【解决方案4】:

@lewis-mcgeary 链接回答 - 原答案链接:https://stackoverflow.com/a/43783080/4075178 是最简单且不言自明的。

此代码用于水平翻转。

 <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">

<group
    android:name="rotationGroup"
    android:pivotX="12"
    android:scaleX="-1" >

    <path
        android:fillColor="#FFFFFF"
        android:pathData="M15,14C17.67,14 23,15.33 23,18V20H7V18C7,15.33 12.33,14 15,14M15,12A4,4 0 0,1 11,8A4,4 0 0,1 15,4A4,4 0 0,1 19,8A4,4 0 0,1 15,12M5,9.59L7.12,7.46L8.54,8.88L6.41,11L8.54,13.12L7.12,14.54L5,12.41L2.88,14.54L1.46,13.12L3.59,11L1.46,8.88L2.88,7.46L5,9.59Z" />
</group>

如果需要垂直翻转, 使用

<group android:pivotY ="half of viewPortHeight"
android:ScaleY =" -1">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2011-08-02
    • 2019-01-26
    相关资源
    最近更新 更多