?
찾고 계시는 분은 ViewPager.OnPageChangeListener.onPageScrolled
입니다. 그러면 다음과 같이 표시됩니다.
- 위치 현재 표시되는 첫 번째 페이지의 위치 인덱스입니다.
- positionOffset 위치의 페이지로부터의 오프셋을 나타내는 [0, 1]의 값입니다.
- positionOffsetPixels 위치의 오프셋을 나타내는 값 (픽셀 단위).
그러나 처음 두 매개 변수 만 있으면됩니다. 당신은 각 조각에 특정 색상을 바인딩하고 현재 페이지와 다음 페이지 색상을 모두 검색 한 다음 positionOffset
비율을 사용하여 블렌드하여 새로운 ActionBar
배경을 만들 수 있습니다.
Google의 새로운 SlidingTabStrip
예에서 비율에 따라 두 가지 색상을 혼합하는 데 유용한 알고리즘을 찾을 수 있습니다.
ColorFragment
public class ColorFragment extends Fragment {
private static final String KEY_COLOR = "colorfragment:color";
/** Empty constructor as per the {@link Fragment} docs */
public ColorFragment() {
}
public static ColorFragment newInstance(int color) {
final Bundle args = new Bundle();
args.putInt(KEY_COLOR, color);
final ColorFragment fragment = new ColorFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final FrameLayout rootView = new FrameLayout(getActivity());
rootView.setBackgroundColor(getArguments().getInt(KEY_COLOR));
return rootView;
}
public int getColor() {
return getArguments().getInt(KEY_COLOR);
}
}
당기면 다음은 간단한 예이다 0.0
은 제 2 색을 반환, 0.5
은 심지어 혼합 반환하고 1.0
는 제 1 색을
static int blendColors(int from, int to, float ratio) {
final float inverseRation = 1f - ratio;
final float r = Color.red(from) * ratio + Color.red(to) * inverseRation;
final float g = Color.green(from) * ratio + Color.green(to) * inverseRation;
final float b = Color.blue(from) * ratio + Color.blue(to) * inverseRation;
return Color.rgb((int) r, (int) g, (int) b);
}
를 반환 모두 함께
개
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the ActionBar background
final ColorDrawable actionBarBackground = new ColorDrawable();
getSupportActionBar().setBackgroundDrawable(actionBarBackground);
...
final PagerAdapter pagerAdapter = ...;
...
// Bind your data to your PagerAdapter
...
final ViewPager pager = ...;
pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
if (position >= pagerAdapter.getCount() - 1) {
// Guard against ArrayIndexOutOfBoundsException
return;
}
// Retrieve the current and next ColorFragment
final ColorFragment from = (ColorFragment) pagerAdapter.getItem(position);
final ColorFragment to = (ColorFragment) pagerAdapter.getItem(position + 1);
// Blend the colors and adjust the ActionBar
final int blended = blendColors(to.getColor(), from.getColor(), positionOffset);
actionBarBackground.setColor(blended);
}
});
pager.setAdapter(pagerAdapter);
}
결과
http://gfycat.com/CautiousBewitchedJabiru
난 그 일부를 당신을 도움이되기를 바랍니다!
안녕하세요. 도와 줘서 고마워. 코리 :) – Fishingfon
좋고 유용한 답변. 감사합니다 – webo80
이것은 재미있어 보입니다 ... –