1

Ich habe die folgende Ausnahme beim Versuch, den Hintergrund der Seiten innerhalb einer ViewPager in der onPageScrolled Methode zu ändern. Ich habe die Frage bearbeitet, um sie klarer zu machen.Android-Ressource nicht gefunden Ausnahme onPageScrolled

android.content.res.Resources$NotFoundException: Resource ID #0x0 
                      at android.content.res.Resources.getValue(Resources.java:1245) 
                      at android.content.res.Resources.getColor(Resources.java:899) 
                      at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:413) 
                      at com.noel.material_onboarding.OnboardingActivity.color(OnboardingActivity.java:113) 
                      at com.noel.material_onboarding.OnboardingActivity.access$200(OnboardingActivity.java:29) 
                      at com.noel.material_onboarding.OnboardingActivity$1.onPageScrolled(OnboardingActivity.java:86) 

Zunächst erstelle ich den Schieber Objekte, dazu gehört auch die Hintergrundfarbe der Einrichtung:

addSlide(new SlideFragmentBuilder() 
      .description("This is a test") 
      .backgroundColor(R.color.colorPrimary) 
      .build()); 
    addSlide(new SlideFragmentBuilder() 
      .description("This is a test 2") 
      .backgroundColor(R.color.green) 
      .build()); 
    addSlide(new SlideFragmentBuilder() 
      .description("This is a test 3") 
      .backgroundColor(R.color.orange) 
      .build()); 
    addSlide(new SlideFragmentBuilder() 
      .description("This is a test 4") 
      .backgroundColor(R.color.orange) 
      .build()); 

Hier ist ein Link auf die SlideFragmentBuilder auf Github und die Fragment class itself

Hier mein onPageScrolled Methode ist:

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      int colorUpdate = (Integer) evaluator.evaluate(positionOffset, color(mOnboardingAdapter.getItem(position).backgroundColor()), color(mOnboardingAdapter.getItem(position + 1).backgroundColor())); 
      mViewPager.setBackgroundColor(colorUpdate); 


      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       Window window = getWindow(); 
       window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
       window.setStatusBarColor(colorUpdate); 
      } 
     } 

     @Override 
     public void onPageSelected(int position) { 
      btnFinish.setVisibility(position == mOnboardingAdapter.getLastItemPosition() ? View.VISIBLE : View.GONE); 
      btnNext.setVisibility(position == mOnboardingAdapter.getLastItemPosition() ? View.GONE : View.VISIBLE); 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

Die Farbe() Methode, die uns ist ed

Grundsätzlich brauche ich nur den Hintergrund einer Seite zu verblassen, wie der Benutzer auf eine andere Seite wischt.

+0

Sie 'genannt Farbe (0)', und Ihr Fehler sagt, es ist nicht glücklich darüber –

+0

'mOnboardingAdapter.getItem (Position + 1)' scheint zu haben sein Attribut, das von 'backgroundColor()' nicht initialisiert wird –

+0

Hallo @ cricket_007 könnten Sie bitte erklären mehr auf diese, ich Ich habe ein paar mehr Informationen zu der Frage hinzugefügt, um es klarer zu machen. Wie initialisiere ich den Gegenstand an Position + 1? –

Antwort

1

Ok, s o Ich ging durch die Dokumente und fand eine wichtige Sache, die ich vermisste:

int: Positionsindex der ersten Seite, die gerade angezeigt wird. Die Seitenposition + 1 wird sichtbar, wenn positionOffset ungleich Null ist.

Grundsätzlich war die App auf dem zweiten Bildschirm vernichtend, nachdem der positionOffset wieder auf Null ging. So funktioniert es: Auf dem ersten Bildschirm ist der PositionOffset Null und die Position der Seite ist ebenfalls Null, jedoch ist die Position + 1 nicht verfügbar, da der PositionOffset Null ist. Ich löste dies durch die folgende Erklärung hinzu, ob der Offset zu überprüfen Null ist oder nicht:

positionOffset != 0.0 ? position + 1 : position 

Dies ist, wie die onPageScrolled Methode wie folgt aussieht:

 @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      int colorUpdate = (Integer) evaluator.evaluate(positionOffset, color(mOnboardingAdapter.getItem(position).backgroundColor()), color(mOnboardingAdapter.getItem(positionOffset != 0.0 ? position + 1 : position).backgroundColor())); 
      mViewPager.setBackgroundColor(colorUpdate); 


      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       Window window = getWindow(); 
       window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
       window.setStatusBarColor(colorUpdate); 
      } 
     } 
0

versuchen, diese

Color.parseColor(mOnboardingAdapter.getItem(position + 1)); 

zu verwenden und vergessen nicht integer

werfen
(Integer) 

zu entfernen, und ich denke, dass

mOnboardingAdapter.getItem(position + 1) 

ein Nullwert ist (nicht initialisiert)

+0

Hi könnten Sie mir bitte sagen, wie ich diesen 'mOnboardingAdapter initialisieren würde.getItem (Position + 1) 'Ich habe die Frage mit mehr Informationen aktualisiert, hoffe, dass dies hilft –

+0

Ok können Sie mir sagen, warum Sie addOnPageChangeListener nicht OnPageChangeListener verwenden? –

+0

Und ich denke, es ist getItemPosition (Position); not getItem() –