5

मैं स्लाइड-इन नेविगेशन (एक ला फेसबुक, पथ या Google+ एंड्रॉइड ऐप्स) को लागू करने का प्रयास कर रहा हूं। इस बग can be found here को पुन: पेश करने का पूरा स्रोत।डिवाइस पर दृश्य एनिमेट करते समय एंड्रॉइड वेबव्यू फ़्लिकर बग

स्क्रीन पर WebView एनिमेट करते समय, डिवाइस पर, झिलमिलाहट होती है, जैसे कि डिवाइस स्क्रीन से इसे दबाए जाने से पहले मेरे WebView से काट ले रहा है।

WebView slide nav menu IN (device)

विरूपण साक्ष्य एमुलेटर पर नहीं होती है! एनीमेशन सुचारू रूप से आगे बढ़ता है।

WebView slide nav menu IN (emulator)

दिलचस्प है, इस अस्थिर केवल तब होता है जब दृश्य एनिमेटेड किया जा रहा एक WebView है लगता है! मुख्य सामग्री दृश्य के रूप में टेक्स्ट व्यू का उपयोग करके एक ही प्रोजेक्ट यहां दिया गया है। वेब दृश्य गतिविधि के लिए

TextView slide nav menu IN (device)

लेआउट:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/blue" > 

    <WebView 
     android:id="@+id/web_content" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" /> 

</RelativeLayout> 

और पाठ दृश्य गतिविधि के लिए:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/blue" > 

    <TextView 
     android:id="@+id/web_content" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello there. no flicker!" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     /> 

</RelativeLayout> 

संहिता में नेविगेशन मेनू स्लाइड करने के लिए कहा जाता है:

private void slideIn() { 
     LinearLayout actionBarFrame = (LinearLayout) findViewById(android.R.id.content).getParent(); 

     LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
     menuView = inflater.inflate(R.layout.menu, null); 
     menuView.setLayoutParams(new FrameLayout.LayoutParams(SIZE, LayoutParams.MATCH_PARENT, Gravity.LEFT)); 
     FrameLayout decorView = (FrameLayout) getWindow().getDecorView(); 
     decorView.addView(menuView); 
     decorView.bringChildToFront(actionBarFrame); 

     FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) actionBarFrame.getLayoutParams(); 
     params.setMargins(SIZE, 0, -SIZE, 0); 
     actionBarFrame.setLayoutParams(params); 

     TranslateAnimation ta = new TranslateAnimation(-SIZE, 0, 0, 0); 
     ta.setDuration(DURATION); 
     actionBarFrame.startAnimation(ta); 
    } 
,210

और यह पीछे हटने स्लाइड करने के लिए:

private void slideOut() { 
     LinearLayout actionBarFrame = (LinearLayout) findViewById(android.R.id.content).getParent(); 

     FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) actionBarFrame.getLayoutParams(); 
     params.setMargins(0, 0, 0, 0); 
     actionBarFrame.setLayoutParams(params); 

     TranslateAnimation ta = new TranslateAnimation(SIZE, 0, 0, 0); 
     ta.setDuration(DURATION); 
     ta.setAnimationListener(new AnimationListener() { 
      @Override 
      public void onAnimationEnd(Animation arg0) { 
       ((FrameLayout) getWindow().getDecorView()).removeView(menuView); 
       menuView = null; 
      } 
      @Override public void onAnimationRepeat(Animation arg0) { } 
      @Override public void onAnimationStart(Animation arg0) { } 
     }); 
     actionBarFrame.startAnimation(ta); 
    } 

मैं एक सार्वजनिक रेपो के रूप में BitBucket करने के लिए कोड अपलोड ताकि आप इस परियोजना मैं बिल्कुल के रूप में की कोशिश कर सकते हैं।

यह क्यों हो रहा है या इसे ठीक करने के बारे में कोई मदद या विचारों की बहुत सराहना की जाएगी! वांछित क्या है तस्वीर को बाहर और पीछे WebView को आसानी से एनिमेट करना है। धन्यवाद!

+0

यहां एक ही समस्या है। @Robert क्या आपको इसके लिए समाधान मिला? – jayellos

+1

@Jayellos इस समस्या के दो संभावित समाधान हैं। मैं नीचे एक उत्तर जोड़ूंगा, लेकिन कहानी का नैतिक यह है कि 'वेब व्यू' पर हार्डवेयर त्वरण को सक्षम करने में मदद मिल सकती है (यह कुछ प्लेटफ़ॉर्म पर डिफ़ॉल्ट रूप से नहीं है), या [इस लाइब्रेरी] का उपयोग कर (https: // github। कॉम/जेफिनस्टीन 10/स्लाइडिंगमेनू) (हमारे वर्तमान समाधान)। –

उत्तर

5

सामान्य शब्दों में, ऐसा लगता है समस्या है जब हार्डवेयर त्वरण 3.0+ डिवाइस पर सक्षम साथ WebViews का उपयोग कर एक बग से कोई लेना देना नहीं है। मैंने WebView के साथ sliding menu लाइब्रेरी का उपयोग करने का भी प्रयास किया लेकिन उसी झिलमिलाहट की समस्या का अनुभव किया।

webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

इस कोड मेरे लिए झिलमिलाहट हल:

WebView “flashing” with white background if hardware acceleration is enabled (Android 3.0+)

वैकल्पिक हल सॉफ्टवेयर प्रतिपादन करने के लिए WebView की परत प्रकार सेट करने के लिए निम्न कोड का उपयोग करता है: चारों ओर देखने के बाद मैं एक समाधान के यहां पाया कम प्रदर्शन की कमी के साथ।

+0

मैं पुष्टि कर सकता हूं कि वर्कअराउंड काम करता है। क्या किसी को कोई समाधान मिला जो हार्डवेयर त्वरण की अनुमति देता है? – Gibberish

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