2012-02-18 26 views
38

Chcę odwrócić obraz tła przycisku w formacie xml. Widziałem przykład, jak to zrobić, ale było to programowo: http://xjaphx.wordpress.com/2011/06/26/image-processing-image-flipping-mirroring. W każdym razie, mam pliku XML (button_left_state.xml) jak poniżej:Android - odwróć obraz w 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> 

Ale ten kod tylko obrócić obraz o 180 stopni. Czy można odwrócić obraz w formacie xml?

+0

wypróbowałeś mój link? – Raman

+0

Masz szczęście? Występuję w tym samym problemie. Mam Przycisk, który jest Strzała z Gradientem. Przekręciłem go tak, aby strzałka skierowana była w przeciwnym kierunku, używając tego samego kodu . Jednak teraz mój gradient jest do góry nogami. –

+0

Zobacz poniżej. Wysłałem odpowiedź. – Nolesh

Odpowiedz

8

mi rozwiązać mój problem za pomocą layer-list: atrybuty

<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> 

172

używać wagi w ImageView

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

Jest to zdecydowanie najprostsze, działające rozwiązanie. – Louth

+0

min api to 11 :( –

+16

Nie wyświetla się jako działający w podglądzie, ale działa na urządzeniu, dzięki – John

13

Oto bardzo krótki i łatwy do zrozumienia rozwiązanie.

Dodaj do tego ImageView:

android:rotationX="180" 

To będzie przerzucić ImageView poziomo (z lewej < -> prawo).

pionowo umieścić poniżej:

android:rotationY="180" 

przykład:

<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> 

A wynik (zdjęcie wykonane z JNI library that I've made, to może to zrobić poprzez JNI)

enter image description here

+2

to będzie działać tylko dla obrazów symetrii.obracanie nie jest równe odwróceniu/odbiciu lustrzanemu obrazu !! – muetzenflo

+2

@muetzenflo Zaktualizowana odpowiedź, w tym zrzut ekranu. Zauważ, że działa –

+0

fajnie, Nie zdawałem sobie sprawy, że można rota te na osi 3D. dzięki za wysiłek – muetzenflo