केंद्र बिंदु के सापेक्ष Android छवि स्केल एनीमेशन


88

मेरे पास एक ImageView है और मैं इसे एक साधारण स्केल एनीमेशन करता हूं। बहुत मानक कोड।

माई स्केल_अप.एक्सएलएम:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1"
           android:fromYScale="1"
           android:toXScale="1.2"
           android:toYScale="1.2"
           android:duration="175"/>
</set>

मेरा एनीमेशन कोड:

Animation a = AnimationUtils.loadAnimation(this, R.anim.scale_up);
((ImageView) findViewById(R.id.circle_image)).startAnimation(a);

समस्या:

जब छवि तराजू यह केंद्र से पैमाने पर नहीं है, लेकिन ऊपरी बाएँ कोने से। दूसरे शब्द में, छवि के स्केल किए गए वर्जन में केंद्र के समान बिंदु नहीं है, लेकिन इसका शीर्ष-बाएं बिंदु समान है। यहां एक लिंक दिया गया है जो बताता है कि मेरा क्या मतलब है। पहली छवि यह है कि एनीमेशन कैसे स्केल करता है, और दूसरी छवि यह है कि मैं इसे कैसे स्केल करना चाहता हूं। इसे केंद्र बिंदु को समान रखना चाहिए। मैंने छवि पर गुरुत्वाकर्षण स्थापित करने की कोशिश की है, कंटेनर पर, बाएं या दाएं संरेखित करना, यह हमेशा समान होता है। मैं मुख्य स्क्रीन के लिए RelativeLayout का उपयोग कर रहा हूं और ImageView दूसरे RelativeLayout में स्थित है, लेकिन मैंने अन्य लेआउट की कोशिश की, कोई बदलाव नहीं हुआ।

जवाबों:


76

अतिरिक्त अनुवाद, सेट android:pivotX, android:pivotYआधी चौड़ाई और ऊंचाई को भूल जाएं और यह छवि के केंद्र से पैमाने पर होगा।


2
pivotXऔर pivotYआधा viewportWidthऔर viewportHeightसटीक होना चाहिए।
टोबस्को 42

162

50% एनिमेटेड दृश्य का केंद्र है।

50%p माता-पिता का केंद्र है

<scale
    android:fromXScale="1.0"
    android:toXScale="1.2"
    android:fromYScale="1.0"
    android:toYScale="1.2"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="175"/>

30
मेरे लिए 50% ने काम किया (पी के बिना)
अगमोव

5
यह पी के बिना होना चाहिए अगर यह घटक की चौड़ाई या ऊंचाई के सापेक्ष है, जिस पर एनीमेशन लागू करना है। p उस घटक के अभिभावक को संदर्भित करता है जिसके लिए एनीमेशन को लागू करना है।
एलन डीप

50%pXML के बजाय जावा फ़ाइलों में कैसे उपयोग करें ?
निकोला के।

6
new ScaleAnimation (1.0f, 1.2f, 1.0f, 1.2f, Animation.RELATIVE_TO_PARENT, 0.5f, एनीमेशन.ELATIVE_TO_PARENT, 0.5f);
जियांग क्यूई

Px में सेट करने के लिए "a" - एनीमेशन.ABSOLUTE भी है।
ज़ोन

120

@Stevanveltema और @JiangQi द्वारा प्रदान किया गया उत्तर सही है लेकिन यदि आप कोड का उपयोग करके स्केलिंग करना चाहते हैं, तो आप अपने उत्तर का उपयोग कर सकते हैं।

// first 0f, 1f mean scaling from X-axis to X-axis, meaning scaling from 0-100%
// first 0f, 1f mean scaling from Y-axis to Y-axis, meaning scaling from 0-100%
// The two 0.5f mean animation will start from 50% of X-axis & 50% of Y-axis, i.e. from center

ScaleAnimation fade_in =  new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
fade_in.setDuration(1000);     // animation duration in milliseconds
fade_in.setFillAfter(true);    // If fillAfter is true, the transformation that this animation performed will persist when it is finished.
view.startAnimation(fade_in);

1
@ T.Todua क्या त्रुटियां हैं? कृपया एक नया प्रश्न पूछें और इस उत्तर पर वापस जाएं।
रोहन कंडवाल

7

आप ऑफसेट करने के लिए अपने सेट में अनुवाद एनीमेशन का उपयोग कर सकते हैं। आपको शायद इसे प्राप्त करने के लिए toXDelta और toYDelta मान को ट्विक करने की आवश्यकता होगी ताकि यह छवि केंद्रित रहे।

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1"
        android:fromYScale="1"
        android:toXScale="1.2"
        android:toYScale="1.2"
        android:duration="175"/>
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="-20%"
        android:toYDelta="-20%"
        android:duration="175"/>
</set>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.