2015-05-04 55 views
1

我有一个gridview与可点击的项目。当我点击一个项目的时候,gridview被隐藏了,我显示了一个ViewPager。 在我的情况下,这个ViewPager应该像幻灯片一样工作。Viewpager幻灯片下一页落后

所以我试图按照谷歌这里的例子:http://developer.android.com/training/animation/screen-slide.html

如果我打开GridView的项目点击一个新的活动,该viewpager运作良好(如谷歌的例子)。但是,如果我打开隐藏gridview的ViewPager幻灯片动画变得滞后。

很显然,我一直试图用相同的图形/位图等打开viewpager ..

不幸的是我的应用程序需要在同一个活动的工作,我不能打开一个新的。

对ViewPager有一些限制吗?或者我应该关注一些特别的事情?

+0

很难猜测您的问题,因为UI性能强烈依赖于您的测试手机以及GridView中加载了多少项UI控件。 – Youngjae

+0

@Youngjae所以,即使GridView被隐藏,也会导致ViewPager元素滞后? –

+0

隐藏可能会影响UI性能。请参阅http://stackoverflow.com/a/21256139/361100 – Youngjae

回答

0

很简单。

不幸的是我的应用程序需要在同一个活动中工作,我无法打开一个新的。

我假定当用户点击项目(也许含有图像)的网格视图中的一个,一个视图寻呼机显示了与图像,并且用户可以滑动ViewPager为下一图像等。

在这种情况下,请使用对话框片段。

布局ViewPager的图片:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/black"> 

<ImageView 
    android:id="@+id/image_preview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true" 
    android:scaleType="fitCenter" /> 

</RelativeLayout> 

对话框片段编码:

public class SlideshowDialogFragment extends DialogFragment { 
private String TAG = SlideshowDialogFragment.class.getSimpleName(); 
private ArrayList<Image> images; 
private ViewPager viewPager; 
private MyViewPagerAdapter myViewPagerAdapter; 
private TextView lblCount, lblTitle, lblDate; 
private int selectedPosition = 0; 

static SlideshowDialogFragment newInstance() { 
    SlideshowDialogFragment f = new SlideshowDialogFragment(); 
    return f; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_image_slider, container, false); 
    viewPager = (ViewPager) v.findViewById(R.id.viewpager); 
    lblCount = (TextView) v.findViewById(R.id.lbl_count); 
    lblTitle = (TextView) v.findViewById(R.id.title); 
    lblDate = (TextView) v.findViewById(R.id.date); 

    images = (ArrayList<Image>) getArguments().getSerializable("images"); 
    selectedPosition = getArguments().getInt("position"); 

    Log.e(TAG, "position: " + selectedPosition); 
    Log.e(TAG, "images size: " + images.size()); 

    myViewPagerAdapter = new MyViewPagerAdapter(); 
    viewPager.setAdapter(myViewPagerAdapter); 
    viewPager.addOnPageChangeListener(viewPagerPageChangeListener); 

    setCurrentItem(selectedPosition); 

    return v; 
} 

private void setCurrentItem(int position) { 
    viewPager.setCurrentItem(position, false); 
    displayMetaInfo(selectedPosition); 
} 

// page change listener 
ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() { 

    @Override 
    public void onPageSelected(int position) { 
     displayMetaInfo(position); 
    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 

    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 

    } 
}; 

private void displayMetaInfo(int position) { 
    lblCount.setText((position + 1) + " of " + images.size()); 

    Image image = images.get(position); 
    lblTitle.setText(image.getName()); 
    lblDate.setText(image.getTimestamp()); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
} 

// adapter 
public class MyViewPagerAdapter extends PagerAdapter { 

    private LayoutInflater layoutInflater; 

    public MyViewPagerAdapter() { 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = layoutInflater.inflate(R.layout.image_fullscreen_preview, container, false); 

     ImageView imageViewPreview = (ImageView) view.findViewById(R.id.image_preview); 

     Image image = images.get(position); 

     Glide.with(getActivity()).load(image.getLarge()) 
       .thumbnail(0.5f) 
       .crossFade() 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .into(imageViewPreview); 

     container.addView(view); 

     return view; 
    } 

    @Override 
    public int getCount() { 
     return images.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object obj) { 
     return view == ((View) obj); 
    } 


    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View) object); 
    } 
} 
} 

发送图像链接及其描述/标题通过这样的代码:

Bundle bundle = new Bundle(); 
    bundle.putSerializable("images", images); 
    bundle.putInt("position", position); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    SlideshowDialogFragment newFragment = SlideshowDialogFragment.newInstance(); 
    newFragment.setArguments(bundle); 
    newFragment.show(ft, "slideshow"); 

数组列表正在使用:

private ArrayList<Image> images = new ArrayList<>(); 
Image image = new Image(); 
image.setName("Image Title"); 
image.setLarge("ImageUrl");