2013-01-15 16 views
10

के भीतर एंड्रॉइड लेआउट और नेस्टेड लेआउट बनाएं मैं जटिल लेआउट के साथ एक ऐप पर काम कर रहा हूं। मुझे हाल ही में एहसास हुआ कि मुझे भागों या मेरे सभी लेआउट ज़ूम करने की ज़रूरत है।ज़ूम करने योग्य

मेरी मुख्य एक्सएमएल फाइलों में से एक में रैखिक लेआउट है जिसमें कई लेआउट्स के साथ घोंसला है जो स्थिति दृश्यों के लिए सही तरीके से घोंसला है। क्या इस रैखिक लेआउट और सब कुछ ज़ूम करने योग्य बनाने का कोई आसान तरीका है? या पूरी लेआउट फ़ाइल ज़ूम करने योग्य बनाना आसान होगा? मेरे विकल्प क्या हैं?

उत्तर

1

आप स्थिर परिवर्तनों पर एक नज़र डाल सकते हैं। किसी भी ViewGroup या उप-वर्ग को अपने बच्चे के विचारों में परिवर्तन लागू करने के लिए अनुकूलित किया जा सकता है। आप setStaticTransformationsEnabled(true) पर कॉल करके इसे getChildStaticTransformation() कॉलबैक (docs link) को अपने कस्टम ViewGroup पर ओवरराइड करके सक्षम करते हैं। आप अपने ज़ूम प्रभाव को बनाने के लिए स्केल समेत किसी भी रूपांतरण को लागू कर सकते हैं। इस कॉलबैक को किसी भी समय दृश्य को फिर से खींचा जाने या अमान्य करने की आवश्यकता होगी।

इसके अलावा, हार्डवेयर त्वरण के साथ इसका उपयोग करते समय सावधान रहें। उस आवृत्ति के आधार पर जिसके साथ आपको ट्रांसफॉर्मेशन को अपडेट करने की आवश्यकता है, आपको लगता है कि हार्डवेयर आपको उम्मीद के अनुसार फिर से तैयार करने के लिए काफी काम नहीं करता है। यदि ऐसा है, तो आपको इस दृश्य पदानुक्रम के लिए सॉफ़्टवेयर परतों को सक्षम करने की आवश्यकता होगी।

+0

[उदाहरण] (http://stackoverflow.com/questions/4261527/resizing-scaling-down-android-widgets-datepicker-and-timepicker) – Leonidos

4

सबसे पहले उस विशिष्ट दृश्य

public class MyImageView extends ImageView{ 

अवहेलना विधि निम्नलिखित के साथ उस वर्ग का विस्तार।

@Override 
protected void onDraw(Canvas canvas) { 
super.onDraw(canvas); 
canvas.save(); 

canvas.scale(mScaleFactor, mScaleFactor, midPoint.x, midPoint.y); 
if(appInitialized) { 

hsSide.draw(canvas); 
scaleA.draw(canvas); 
scaleB.draw(canvas); 

    } 

canvas.restore(); 


} 

एक इशारा डिटेक्टर कि ज़ूम वस्तु के आकार की पहचान करेगा बनाएँ और आप ओवरलैप से बचने के लिए सीमित कर सकते हैं।

 private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 

@Override 
public boolean onScale(ScaleGestureDetector detector) { 

    mScaleFactor *= detector.getScaleFactor(); 
    pivotX = detector.getFocusX(); 
    pivotY = detector.getFocusY(); 
    // Don't let the object get too small or too large. 
    mScaleFactor = Math.max(0.8f, Math.min(mScaleFactor, 2.0f)); 

    invalidate(); 
    return true; 
    } 
} 

अंत में प्रारंभ वस्तु

ScaleGestureDetector mScaleDetector; 



    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 
+0

धन्यवाद, मैं इसे आज़मा दूंगा! – Peter

+0

क्या यह काम करेगा यदि रूट लेआउट मैं इसे करने की कोशिश कर रहा हूं, यह एक छविदृश्य नहीं है? यह अन्य दृश्यों और लेआउट के साथ एक लेआउट है जिसमें – Peter

+0

आप इसे किसी भी व्यू क्लास के साथ बढ़ा सकते हैं। स्केल जेस्प्रू दृश्य के आकार का पता लगाएगा और आप उस पर एक और दृश्य को ओवरलैप करने के लिए प्रतिबंधित कर सकते हैं। – Jan

संबंधित मुद्दे