【发布时间】:2016-11-16 20:19:33
【问题描述】:
尝试在onPageScrolled 方法中更改ViewPager 内的页面背景时出现以下异常。为了更清楚,我已经编辑了这个问题。
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)
首先我创建滑块对象,这包括设置背景颜色:
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());
这是 github 上的 SlideFragmentBuilder 和 Fragment class itself 的链接
这是我的 onPageScrolled 方法:
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) {
}
});
使用的 color() 方法
private int color(@ColorRes int color){
return ContextCompat.getColor(this, color);
}
基本上,当用户滑动到另一页时,我只需要一个页面的背景淡入即可。
【问题讨论】:
-
你打电话给
color(0),你的错误表明它对此不满意 -
mOnboardingAdapter.getItem(position + 1)似乎有backgroundColor()返回的属性未初始化 -
嗨@cricket_007 你能详细说明一下吗,我在问题中添加了更多信息以使其更清楚,我将如何在位置+ 1 处初始化项目?
-
我只是指出错误的含义...整数为 0,找不到该资源。添加一些 Log 语句进行调试。我不确定你的颜色是否正确stackoverflow.com/questions/5271387/…
标签: android android-fragments android-viewpager android-adapter