Android - 在xml中翻转图像

Nol*_*esh 58 android

我想在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>
Run Code Online (Sandbox Code Playgroud)

但是这段代码只是将图像旋转到180度.是否可以在xml中翻转图像?

Tom*_*sti 239

使用ImageView中的缩放属性

android:scaleX="-1" //To flip horizontally or
android:scaleY="-1" //To flip vertically
Run Code Online (Sandbox Code Playgroud)

  • 不显示在预览中工作但在设备上工作,谢谢 (17认同)
  • 这是迄今为止最简单,最有效的解决方案. (3认同)
  • 这太优雅了,帮助我解决了非对称小部件背景上的 RTL 镜像问题。 (2认同)
  • 这也会反转内容(如果是布局) (2认同)

and*_*per 21

这是一个非常简短易懂的解决方案.

将其添加到imageView:

 android:rotationX="180"
Run Code Online (Sandbox Code Playgroud)

这将水平翻转imageView(左< - >右).

对于垂直,放这个:

android:rotationY="180"
Run Code Online (Sandbox Code Playgroud)

例:

<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>
Run Code Online (Sandbox Code Playgroud)

结果(图片取自我所制作JNI库,可以通过JNI完成):

在此输入图像描述

  • 这只适用于对称图像.旋转不等于翻转/镜像图像!! (3认同)
  • @muetzenflo更新了答案,包括截图.请注意它确实有效 (2认同)

Nol*_*esh 12

我使用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>
Run Code Online (Sandbox Code Playgroud)


Vik*_*dey 9

@lewis-mcgeary 链接的回答 - 原始答案链接:/sf/answers/3064815631/ 是最简单且不言自明的。

此代码用于水平翻转。

 <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>
Run Code Online (Sandbox Code Playgroud)

如果需要垂直翻转,请使用

<group android:pivotY ="half of viewPortHeight"
android:ScaleY =" -1">
Run Code Online (Sandbox Code Playgroud)