使用ViewPager和PageTransformer与Android API&LT发行; 11 [英] Issue using ViewPager and PageTransformer with Android API <11
问题描述
我需要写一个ViewPager上的应用程序与安卓定制的转变:的minSdkVersion =9
我试图运行 ZoomOutPageTransformer
给出的此处。
我没有得到任何编译错误,并在三星Galaxy S运行Android 2.3.3(API 10),该行
pager.setPageTransformer(真,新ZoomOutPageTransformer());
不给任何错误,但是code在ZoomOutPageTransformer的 transformPage
永远不会执行。
在code完美的作品,如果我设置机器人:的minSdkVersion =11
,用我的Nexus 4(API 17)
难道这PageTransformers与API 9和10中使用?不然,我怎么可以创建自定义转换为 ViewPager
?
修改
这里的code我用:
公共类HomeFragment扩展片段{
ViewPager mNewsTitlePager;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
返回inflater.inflate(R.layout.home_content,集装箱,假);
}
@覆盖
公共无效onActivityCreated(包savedInstanceState){
super.onActivityCreated(savedInstanceState);
mNewsTitlePager =(ViewPager)getView()findViewById(R.id.news_title_pager)。
mNewsTitlePager.setPageTransformer(真正的,新ZoomOutPageTransformer());
mNewsTitlePager.setAdapter(新NewsPagerAdapter(news_item_list));
}
私有类NewsPagerAdapter扩展PagerAdapter {
私人列表&LT;新闻GT; news_item_list;
私人LayoutInflater充气;
NewsPagerAdapter(名单&LT;新闻GT; news_item_list){
this.news_item_list = news_item_list;
充气= getActivity()getLayoutInflater()。
}
@覆盖
公共无效destroyItem(ViewGroup中的容器,INT位置,Object对象){
((ViewPager)容器).removeView((查看)对象);
}
@覆盖
公共无效finishUpdate(View容器){
}
@覆盖
公众诠释getCount将(){
返回this.news_item_list.size();
}
@覆盖
公共对象instantiateItem(ViewGroup中认为,INT位置){
TextView的news_title =(TextView中)inflater.inflate(R.layout.news_title_item,查看,FALSE);
news_title.setText(news_item_list.get(位置).title伪);
((ViewPager)视图).addView(news_title,0);
返回news_title;
}
@覆盖
公共布尔isViewFromObject(查看视图,Object对象){
返回view.equals(对象);
}
@覆盖
公共无效restoreState(Parcelable状态,类加载器加载器){
}
@覆盖
公共Parcelable saveState和(){
返回null;
}
@覆盖
公共无效startUpdate(View容器){
}
}
公共类ZoomOutPageTransformer实现ViewPager.PageTransformer {
私人浮动MIN_SCALE = 0.85f;
私人浮动MIN_ALPHA = 0.5F;
公共无效transformPage(查看视图,浮动位){
INT页宽= view.getWidth();
INT pageHeight = view.getHeight();
如果(位置&LT; -1){// [负无穷大,-1)
//这是第路要走屏幕左侧。
view.setAlpha(0);
}否则如果(位置&LT; = 1){// [-1,1]
//修改默认的幻灯片过渡收缩的页面,以及
浮动比例因子= Math.max(MIN_SCALE,1 - Math.abs(位置));
浮vertMargin = pageHeight *(1 - 比例因子)/ 2;
浮horzMargin =页宽*(1 - 比例因子)/ 2;
如果(位置℃,){
view.setTranslationX(horzMargin - vertMargin / 2);
} 其他 {
view.setTranslationX(-horzMargin + vertMargin / 2);
}
//缩放页面向下(MIN_SCALE之间1)
view.setScaleX(比例因子);
view.setScaleY(比例因子);
// Fade页面相对于它的大小。
view.setAlpha(MIN_ALPHA +
(比例因子 - MIN_SCALE)/
(1 - MIN_SCALE)*(1 - MIN_ALPHA));
}其他{//(1 +无限远]
//这是第路要走屏幕右侧。
view.setAlpha(0);
}
}
}
}
好了:我得到的答案在的 DOC :
由于属性动画仅支持为安卓3.0和前进的,在早期版本的平台上设置一个ViewPager一个PageTransformer将被忽略。
我会使用 ViewFlipper
代替。
I need to write a custom transition for a ViewPager on an app with android:minSdkVersion="9"
.
I'm trying to run the ZoomOutPageTransformer
given here.
I get no compiling error, and on a Samsung Galaxy S running Android 2.3.3 (API 10), the line
pager.setPageTransformer(true, new ZoomOutPageTransformer());
does not give any error, but the code in ZoomOutPageTransformer's transformPage
is never executed.
The code works perfectly if I set android:minSdkVersion="11"
and use my Nexus 4 (API 17).
Can these PageTransformers be used with API 9 and 10? Otherwise, how can I create custom transitions for ViewPager
?
EDIT
Here's the code I use:
public class HomeFragment extends Fragment{
ViewPager mNewsTitlePager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.home_content, container, false);
}
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mNewsTitlePager = (ViewPager) getView().findViewById(R.id.news_title_pager);
mNewsTitlePager.setPageTransformer(true, new ZoomOutPageTransformer());
mNewsTitlePager.setAdapter(new NewsPagerAdapter(news_item_list));
}
private class NewsPagerAdapter extends PagerAdapter {
private List<News> news_item_list;
private LayoutInflater inflater;
NewsPagerAdapter(List<News> news_item_list) {
this.news_item_list = news_item_list;
inflater = getActivity().getLayoutInflater();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public int getCount() {
return this.news_item_list.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
TextView news_title = (TextView) inflater.inflate(R.layout.news_title_item, view, false);
news_title.setText(news_item_list.get(position).title);
((ViewPager) view).addView(news_title, 0);
return news_title;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View container) {
}
}
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private float MIN_SCALE = 0.85f;
private float MIN_ALPHA = 0.5f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
} else {
view.setTranslationX(-horzMargin + vertMargin / 2);
}
// Scale the page down (between MIN_SCALE and 1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
// Fade the page relative to its size.
view.setAlpha(MIN_ALPHA +
(scaleFactor - MIN_SCALE) /
(1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
}
Ok: I got the answer at the beginning of the doc:
As property animation is only supported as of Android 3.0 and forward, setting a PageTransformer on a ViewPager on earlier platform versions will be ignored.
I'll use ViewFlipper
instead.
这篇关于使用ViewPager和PageTransformer与Android API&LT发行; 11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!