क्या एक्सएमएल विवरण में एक ड्रॉबल को घुमाना संभव है?


102

मैं एक ऐप बना रहा हूं, ऐसे संसाधनों के साथ जिनका पुन: उपयोग किया जा सकता है (क्योंकि बटन हमेशा समान होते हैं, लेकिन प्रतिबिंबित या घुमाए जाते हैं)। मैं एक ही संसाधन का उपयोग करना चाहता हूं इसलिए मुझे 3 और संसाधन नहीं जोड़ने हैं जो बिल्कुल मूल लेकिन घुमाए गए जैसे हैं। लेकिन मैं उन चीज़ों के साथ कोड भी नहीं जोड़ना चाहता जो एक्सएमएल में घोषित की जा सकती हैं या एक मैट्रिक्स के साथ रूपांतरण कर सकती हैं जिसमें प्रसंस्करण समय खर्च होगा।

मुझे एक एक्सएमएल में घोषित दो स्टेट बटन मिला है।

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/and_card_details_button_down_left_onclick" /> <!-- pressed -->
    <item android:drawable="@drawable/and_card_details_button_down_left" /> <!-- default -->
</selector>

और मैं ड्रॉबल का फिर से उपयोग करना चाहता हूं क्योंकि यह 90ated और 45 to पर समान होगा और मैं एक ड्रॉबल के रूप में बटन को असाइन करता हूं।

<Button android:id="@+id/Details_Buttons_Top_Left_Button"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/details_menu_large_button" />

मुझे पता है कि मैं इसे एक RotateDrawableया एक के साथ घुमा सकता हूंMatrix लेकिन जैसा कि मैंने पहले ही समझाया था कि मुझे वह तरीका पसंद नहीं है।

क्या एक्सएमएल पर सीधे यह हासिल करना संभव है या आपको क्या लगता है कि यह करने का सबसे अच्छा तरीका होगा? सभी संसाधनों को रखो, लेकिन घुमाए गए, उन्हें कोड में घुमाएं?

--- EDIT --- @Maxaxi का जवाब बहुत अच्छा काम करता है, यह है कि इसे आइटम सूची के साथ कैसे जोड़ा जाए :)

<?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="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:drawable="@drawable/and_card_details_button_up_onclick"/>
    </item>

    <item>
        <rotate
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:drawable="@drawable/and_card_details_button_up_onclick"/>
    </item>

</selector>

4
अपने अंग्रेजी माफी माँगने की कोई ज़रूरत नहीं है। और एसओ में आपका स्वागत है!
PeeHaa

इस समस्या को इसी सूत्र में देखें stackoverflow.com/questions/14727426/ ... कोई भी सुझाव बहुत अच्छा होगा!
सुकर्णो

वेक्टर आधारित ड्राएबल्स मामलों को बहुत सरल करता है (नीचे उत्तर)।
samis

जवाबों:


136

मैं XML में घुमा सकता हूं :

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:drawable="@drawable/mainmenu_background">
</rotate>

fromDegreesमहत्वपूर्ण है।

मूल रूप से यह एक्सएमएल में परिभाषित एक घूर्णन एनीमेशन है। साथ fromDegreesआपके द्वारा निर्धारित प्रारंभिक घुमाया राज्य। toDegreesएनीमेशन अनुक्रम में drawable के अंतिम घुमाया राज्य है, लेकिन कुछ भी हो सकता आप एनीमेशन का उपयोग नहीं करना चाहते हैं।

मुझे नहीं लगता कि यह एनीमेशन के लिए संसाधन आवंटित करता है क्योंकि इसे एनीमेशन के रूप में लोड नहीं करना पड़ता है। एक ड्रॉबल के रूप में इसे प्रारंभिक अवस्था में प्रस्तुत किया जाता है और इसे drawableसंसाधन फ़ोल्डर में रखा जाना चाहिए । इसे एक एनीमेशन के रूप में उपयोग करने के लिए आपको इसे animसंसाधन फ़ोल्डर में रखना चाहिए और इस तरह एनीमेशन शुरू कर सकते हैं (सिर्फ एक उदाहरण):

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation);
rotation.setRepeatCount(Animation.INFINITE);
myView.startAnimation(rotation);

1
धन्यवाद यह एकदम सही है! मैंने उसे आइटम के साथ जोड़ दिया और इसके ठीक उसी तरह से जिसकी मुझे आवश्यकता है, मैं कोड पोस्ट करना चाहता हूं, मुझे नहीं पता कि क्या बेहतर होगा कि आप अपने उत्तर या मेरे प्रश्न को संपादित कर सकें ... और छवि को प्रतिबिंबित करने के लिए मुझे धुरी के साथ खेलना होगा x & y?
गूफीहेड

खैर, मुझे खुशी है कि मैं आपकी मदद कर सकता हूं, यदि आप चाहें तो उत्तर को संपादित कर सकते हैं। pivotX और pivotY रोटेशन के केंद्र बिंदु को परिभाषित करता है। मिररिंग के लिए मेरे पास विचार नहीं है क्योंकि यह एक्सएमएल केवल 2 डी रोटेशन को परिभाषित कर सकता है।
dmaxi

1
@dmaxi यह एक घूर्णन एनीमेशन के माध्यम से ड्रॉएबल को घुमा रहा है? क्या यह कुछ अक्षम नहीं होगा?
स्टार्कज 2

मैंने इसे बनाया, लेकिन 0 से 360 डिग्री तक क्योंकि मैं एक पूर्ण रोटेशन चाहता हूं, समस्या यह है कि छोटे स्क्रीन में यह विकृत घूमता है, कोई सुराग?
अग्निशमन

1
एंड्रॉइड एम में एक बग था जो इस सटीक घुमाव को प्रभावित करने योग्य है, यह पूरी तरह से गायब हो जाता है, इसलिए यदि आप इस शोक का चयन करते हैं, तो यह एम में टूट जाएगा एन के लिए तय किया गया था
Androidguy

35

मैं XML में बाएँ तीर को दाएँ घुमा सकता हूँ:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="180"
    android:toDegrees="0"
    android:drawable="@drawable/left">
</rotate>

संदर्भ के लिए संलग्न छवि।

यहां छवि विवरण दर्ज करें


मैं यह कर रहा हूँ, लेकिन मैं किसी भी विचार को लेआउट करने के लिए पृष्ठभूमि सेट नहीं कर सकता हूँ?
मतीन चौधरी

18

यदि वेक्टर आधारित ड्राबल्स का उपयोग किया जाता है, तो ImageView , शैली और रंग स्थिति सूची के साथ संयोजन में , आपका बटन निम्न के रूप में रिफैक्ट किया जा सकता है:

नोट: वेक्टर ड्रॉवल छवियों की तुलना में काफी छोटा है, इसलिए अतिरिक्त, स्पष्ट परिभाषाएं बहुत अधिक उपजी नहीं हैं, और स्पष्ट, स्पष्ट कोड के लिए बनाता है (हालांकि मैंने पढ़ा है कि हाथ को संशोधित करने वाली वेक्टर संपत्ति से बचा जाना चाहिए, मैं इससे निपटना चाहता हूं। एक पर रूपांतरण होने की तुलना में कुछ फ़ाइलों को अपडेट करने का ओवरहेड):

नोट: एंड्रॉइड स्टूडियो वेक्टर संपत्ति के लिए एक महान स्रोत है।

रेस \ मूल्यों \ styles.xml

<!--ImageView-->
<style name="Details_Buttons_Top_Left_Button">
  <item name="android:layout_width">match_parent</item>
  <item name="android:layout_height">match_parent</item>    
  <item name="android:tint">@color/button_csl</item>    
</style>

रेस \ रंग \ button_csl.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
  <item android:state_enabled="false" android:color="@color/grey_disabled"/>
  <item android:state_pressed="true" android:color="@color/orange_hilite"/>
  <item android:color="@color/black"/>  
</selector>

details_menu_large_button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true"
        android:drawable="@drawable/and_card_details_button_down_left_onclick" /> <!-- pressed -->
  <item android:drawable="@drawable/and_card_details_button_down_left" /> <!-- default -->
</selector>

Details_Buttons_Top_Left_Button

<ImageView android:id="@+id/Details_Buttons_Top_Left_Button"
           style="@style/Details_Buttons_Top_Left_Button"
           android:src="@drawable/details_menu_large_button" />

and_card_details_button_down_left.xml (ic_play_arrow_black_24dp.xml)

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">  
  <path
        android:fillColor="#FF000000"
        android:pathData="M8,5v14l11,-7z"/>

</vector>

and_card_details_button_down_left_onclick.xml (ic_play_arrow_black_24dp.xml संशोधित)

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
  <group android:name="rotationGroup"
         android:pivotX="12"
         android:pivotY="12"
         android:rotation="90" >
    <path
          android:fillColor="#FF000000"
          android:pathData="M8,5v14l11,-7z"/>
  </group>
</vector>

3
के लिए अच्छा जवाब rotationGroupविशेषता है, यह बहुत अच्छी तरह से वेक्टर घूमता है
blueware

0

यदि आप फ़ाइल rotationमें शामिल करना चाहते हैं xmlतो सरल ऐड android:rotation="180"इन करेंImageView

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_dropdown"
    android:rotation="180"/>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.