मैं फ़्रेमलेआउट के उप-वर्ग पर काम कर रहा हूं जो अपने सभी बच्चों को 90 डिग्री से घूमने वाला माना जाता है। मैं एंड्रॉइड 2.1 और नीचे में लैंडस्केप-केवल कैमरे की सीमा को पार करने के लिए कर रहा हूं, गतिविधि को परिदृश्य में रखकर, लेकिन मेरे कैमरे को ओवरले में इस फ़्रेमेलआउट ओवरले में रखकर ऐसा लगता है कि यह पोर्ट्रेट (this is how Layar does it) था इसे पूरा करने के लिए, मैं दृश्यों को घुमाने के लिए Jeff Sharkey's code का अनुकूलन कर रहा हूं। मेरी समस्या यह है कि मैं Framelayout घुमा सकते हैं, लेकिन मैं नए आयामों से मेल खाने के लिए इसका आकार बदल नहीं सकता। तो मेरे जी 1 पर, लैंडस्केप में 480x320 कैमरे के दृश्य पर 320x480 पोर्ट्रेट व्यू के बजाय, मुझे बीच में 320x320 बॉक्स मिलता है जो पक्षियों के साथ मेरे पोर्ट्रेट व्यू को दिखाता है।घुमाएं देखें पदानुक्रम 90 डिग्री
public class RotateLayout extends FrameLayout {
private Matrix mForward = new Matrix();
private Matrix mReverse = new Matrix();
private float[] mTemp = new float[2];
public RotateLayout(Context context) {
super(context);
}
public RotateLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
/* (non-Javadoc)
* @see android.widget.FrameLayout#onMeasure(int, int)
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//This didn't work:
//super.onMeasure(heightMeasureSpec, widthMeasureSpec);
}
/* (non-Javadoc)
* @see android.widget.FrameLayout#onSizeChanged(int, int, int, int)
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.rotate(270, getWidth()/2, getHeight()/2);
//This code will stretch the canvas to accommodate the new screen size. This is not what I want.
//float scaleX=(float)getHeight()/getWidth();
//float scaleY=(float)getWidth()/getHeight();
//canvas.scale(scaleX, scaleY, getWidth()/2, getHeight()/2);
mForward = canvas.getMatrix();
mForward.invert(mReverse);
canvas.save();
canvas.setMatrix(mForward); //This is the matrix we need to use for proper positioning of touch events
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
final float[] temp = mTemp;
temp[0] = event.getX();
temp[1] = event.getY();
mReverse.mapPoints(temp);
event.setLocation(temp[0], temp[1]);
return super.dispatchTouchEvent(event);
}
}
मैं OnMeasure
अधिभावी एक्स और देखें की Y आयाम स्विच करने के लिए कोशिश की है, लेकिन नहीं है कि काम करने के लिए प्राप्त करने में सक्षम किया गया है:
यहाँ मेरी कोड अब तक है। कोई भी सहायता जो आप प्रदान कर सकते हैं उसकी बहुत सराहना की जाती है।
हाय, क्या आपने इसे किसी भी तरह हल किया? – fhucho
नहीं - अंतिम समाधान उपरोक्त कोड का उपयोग करना था और इनमें से प्रत्येक में से प्रत्येक को लपेटकर बटन, टेक्स्टव्यू इत्यादि को अलग-अलग घुमाएं। यह बहुत सुरुचिपूर्ण नहीं है, लेकिन यह काम करता है। – QRohlf
मेरा मानना है कि 'प्रेषण टचएवेंट()' के अंदर आपको 'getX()' और 'getY()' के बजाय 'getRawX()' और 'getRawY()' का उपयोग करना चाहिए। यह किसी भी दर पर मेरे लिए बेहतर काम करता है। मेरा विचार वर्ग है, fwiw। –