2012-01-28 17 views
6

मैं एंड्रॉइड पर एचटीएमएल/जेएस में एक छोटा सा गेम बना रहा हूं। मैं अपने एचटीसी डिजायर (एंड्रॉइड 2.2) पर एक समस्या में भाग रहा हूं। जब मैं स्क्रीन को स्पर्श करता हूं, तो सभी छवियां पिक्सलेटेड लगती हैं और जब स्पर्श समाप्त होता है तो वे अन-पिक्सलेटेड होते हैं।स्क्रीन को छूने पर छवियों को पिक्सलेट किया जाता है

enter image description here

सही जब स्क्रीन को छुआ जा रहा है यह है पर:

यहाँ एक स्क्रीनशॉट है। क्या कोई मुझे यह समझने में मदद कर सकता है कि इस मुद्दे का क्या कारण है?

नोट्स:

  • एनिमेशन के दौरान कोई समस्या नहीं है, तो स्क्रीन को छुआ नहीं है
  • मैं अपने एलजी 540 Android पर यह समस्या नहीं है 2.1
  • ऐसा लगता है छवियों की संख्या सीमित मिल रंग जब इसे छुआ जा रहा है
  • मैं Phonegap
  • उपयोग कर रहा हूँ
+0

यह ग्राफिक्स कार्ड की वजह से है, तो आपके एलजी फोन में शायद 3 डी त्वरण नहीं है, लेकिन इच्छा के पास कम अंत होता है। आप वास्तव में इसकी सहायता नहीं कर सकते AFAIK –

+0

क्या मेरा अपडेट किया गया उत्तर नीचे मदद करता है? – Matt

उत्तर

2

जहां तक ​​मेरा बता सकते हैं, कि "pixelated" व्यवहार एक opti है स्क्रॉलिंग के लिए बनाया गया मिश्रण (फियोयो और ऊपर) में। यदि प्रतिपादन को सरल बनाया गया है, तो यह फ़्लिंग स्क्रॉल एनीमेशन जैसी चीज़ों को कम प्रोसेसिंग की आवश्यकता बनाता है।

यदि आपको पूर्ण ब्राउज़र कार्यक्षमता की आवश्यकता है, तो मुझे यकीन नहीं है कि आप इसकी बहुत मदद कर सकते हैं।

चूंकि आपने कहा है कि आप एक गेम बना रहे हैं, हालांकि, मेरे पास एक कामकाज हो सकता है। मुझे उम्मीद है कि आपके गेम को स्क्रॉल (एक पूर्ण स्क्रीन) की आवश्यकता नहीं है, इसलिए स्क्रॉलिंग अनुकूलन आवश्यक नहीं है।

मैंने वेबव्यू के साथ एक सरल परीक्षण किया है। जैसा कि आपने बताया है, टैप पर, प्रतिपादन सरल हो जाता है, और चीजें थोड़ी दूर दिखाई देती हैं। फिर एक बार कुछ क्लिक किया जाता है (WebView जानता है कि कोई और स्क्रॉलिंग नहीं हो रही है), चीजें सामान्य पर वापस जाती हैं।

मैं एक FrameLayout के साथ एक WebView की जगह, के आधार पर अपने लेआउट को संशोधित किया। फ़्रेमलेआउट में वेब व्यू और एक अदृश्य बटन (शीर्ष पर) शामिल है। यह बटन सभी स्पर्श घटनाओं को पकड़ता है। फिर, मैं चुनिंदा चुनता हूं कि WebView की किस प्रकार की घटनाओं की आवश्यकता होनी चाहिए, और उन्हें वेबव्यू में पास कर दें। यदि टच डाउन और टच अप एक साथ निकट हो जाते हैं, तो betweeen में कोई आंदोलन नहीं होने के कारण, स्क्रॉलिंग का कोई कारण नहीं है, इसलिए मैंने उस "पिक्सेललेट" व्यवहार में से कोई भी नहीं देखा है।

क्योंकि यह इस उदाहरण के लिए सबसे आसान था, मैंने "मोशनइवेंट.एक्शन_यूपी" घटना का पता लगाने के लिए चुना है, और जब यह पूरा हो गया है, तो मैं पहले नीचे भेजता हूं, ताकि यह वास्तविक क्लिक को अनुकरण कर सके। आप निश्चित रूप से ACTION_DOWN पर ट्रिगर कर सकते हैं, लेकिन यदि उपयोगकर्ता स्वाइप करता है या कुछ तो आप उनमें से एक से अधिक प्राप्त करेंगे, और मैं तर्क को यहां सरल रखना चाहता था। आप फिट बैठते समय अनुकूलित कर सकते हैं, और शायद पर्याप्त काम के साथ, कुछ मामलों में स्क्रॉलिंग भी सक्षम कर सकते हैं। मुझे आशा है कि नीचे दिया गया कोड जो मुझे लगता है कि रिले करने के लिए पर्याप्त है।

WebView wv = new WebView(this); 
View dummyView = new Button(this); 
dummyView.setBackgroundColor(0x00000000); 
dummyView.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      MotionEvent down = MotionEvent.obtain(100, 100, 
       MotionEvent.ACTION_DOWN, event.getX(), 
       event.getY(), 0); 
      wv.onTouchEvent(down); 
      wv.onTouchEvent(event); 
     } 
     return false; 
    } 
}); 
FrameLayout fl = new FrameLayout(this); 
fl.addView(wv); 
fl.addView(dummyView); 
topLayout.addView(fl); 

संपादित करें:

: आप PhoneGap स्रोत को संपादित नहीं करना चाहते हैं, तो आप की तरह PhoneGap लेआउट बदलने के लिए निम्नलिखित ... यह untested है, लेकिन जैसे कि यह काम करना चाहिए लगता है कुछ करने के लिए सक्षम हो सकता है
@Override 
public void onCreate(Bundle arg0) { 
    super.onCreate(arg0); 
    super.loadUrl("file:///android_asset/www/index.html"); 
    // Get the "root" view from PhoneGap 
    LinearLayout droidGapRoot = super.root; 
    // Create a new "root" that we can use. 
    final LinearLayout newRoot = new LinearLayout(this); 
    for (int i = 0; i < droidGapRoot.getChildCount(); i++) { 
     // Move all views from phoneGap's LinearLayout to ours. 
     View moveMe = droidGapRoot.getChildAt(i); 
     droidGapRoot.removeView(moveMe); 
     newRoot.addView(moveMe); 
    } 
    // Create an invisible button to overlay all other views, and pass 
    // clicks through. 
    View dummyView = new Button(this); 
    dummyView.setBackgroundColor(0x00000000); 
    dummyView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // Only pass "UP" events to the specific view we care about, but 
      // be sure to simulate a valid "DOWN" press first, so that the 
      // click makes sense. 
      if (event.getAction() == MotionEvent.ACTION_UP) { 
       MotionEvent down = MotionEvent.obtain(100, 100, 
         MotionEvent.ACTION_DOWN, event.getX(), 
         event.getY(), 0); 
       newRoot.onTouchEvent(down); 
       newRoot.onTouchEvent(event); 
      } 
      return false; 
     } 
    }); 
    // Layer the views properly 
    FrameLayout frameLayout = new FrameLayout(this); 
    frameLayout.addView(newRoot); 
    frameLayout.addView(dummyView); 
    // Add our new customized layout back to the PhoneGap "root" view. 
    droidGapRoot.addView(frameLayout); 
} 
+0

आपकी पोस्ट के लिए धन्यवाद, हालांकि मैंने कहा है कि मैं फोनगैप का उपयोग कर रहा हूं और मेरा ऐप 99% जावास्क्रिप्ट के साथ बनाया गया है, मेरे पास ऐप.जावा नामक एक जावा क्लास है, आप इसे यहां देख सकते हैं http://phonegap.com/start #android क्या आपको अभी भी लगता है कि अगर मैं किसी भी तरह से कोड को एकीकृत कर सकता हूं तो आपका समाधान काम कर सकता है? – adrien54

+0

मुझे उम्मीद है कि ऊपर दिया गया अतिरिक्त उदाहरण मदद करेगा। – Matt

+0

मैंने कोशिश की, गुम वर्गों को आयात करने के बाद मुझे ऐप चल रहा है, हालांकि स्क्रीन काली है और मेरे पास कोई चेतावनी या जानकारी नहीं है जो मेरी मदद कर सकती है। वैसे भी आपकी मदद के लिए Thx। – adrien54

0

मैं इस एक ही मुद्दे में चल रहा हूँ। एक चीज जिसे आप कोशिश कर सकते हैं एंड्रॉइड जोड़ रहा है: टैग में आपके ऐप के मैनिफेस्ट में हार्डवेयर एक्सेलेरेटेड = "सच्चा"।इसने मेरे लिए समस्या को रोक दिया, हालांकि अब पूरा ऐप मेरे डिवाइस पर थोड़ा अधिक पिक्सलेटेड लगता है, इसलिए यह सबसे अच्छा समाधान नहीं हो सकता है।

0

दो बार जांचें कि आपकी छवियों में सीएसएस में पिक्सल में समान आकार के रूप में फाइलें हैं। ऐसा लगता है कि किसी तरह से संबंधित है। यदि मैं एक बड़ी छवि लेता हूं और डिवाइस-निर्भर जेनरेटेड सीएसएस के साथ इसे फिर से स्केल करता हूं, तो मुझे समस्या दिखाई देती है। अन्यथा यह या तो प्रस्तुत नहीं किया गया है या दिखाई नहीं दे रहा है। सुनिश्चित नहीं है कि मूल समस्या को नवीनतम Androids में ठीक किया गया है, लेकिन मैं अभी भी 2.3 का समर्थन करता हूं, इसलिए उम्मीद है कि इससे मदद मिलती है।

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

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