如何在Android中编写动态幻灯片
我尝试使用ViewFlipper编写动态幻灯片,但我不能同时将所有位图(ImageView)放入ViewFlipper,因为这会导致OutOfMemoryException 目前,我有这个代码,它只显示最后一张图片,然后没有更多如何在Android中编写动态幻灯片,android,slideshow,viewflipper,Android,Slideshow,Viewflipper,我尝试使用ViewFlipper编写动态幻灯片,但我不能同时将所有位图(ImageView)放入ViewFlipper,因为这会导致OutOfMemoryException 目前,我有这个代码,它只显示最后一张图片,然后没有更多 mViewFlipper.setAutoStart(true); mViewFlipper.setFlipInterval(3000); mViewFlipper.startFlipping(); setPictures(im); mViewFlipper.stopFl
mViewFlipper.setAutoStart(true);
mViewFlipper.setFlipInterval(3000);
mViewFlipper.startFlipping();
setPictures(im);
mViewFlipper.stopFlipping();
private void setPictures(IMI im) {
Bitmap bmp = setView(im);
setFlipperImage(bmp);
bmp = null;
mViewFlipper.setInAnimation(null);
mViewFlipper.setOutAnimation(null);
while (mViewFlipper.getChildCount() > 1) {
mViewFlipper.removeViewAt(0);
}
}
private void setFlipperImage(Bitmap bm) {
ImageView image = new ImageView(getApplicationContext());
image.setImageBitmap(bm);
mViewFlipper.addView(image);
}
private Bitmap setView(IMI im) {
Bitmap bmp = null;
try {
bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse("file://" + im.getUri()));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bmp;
}
提前感谢您的帮助。不要在本用例中使用ViewFlipper(出于您给出的确切原因)。与FragmentPagerAdapter结合使用,其中每个片段显示一个图像。这样一次最多只能加载3个位图。试试这个 slideviewpage.java
public class SlideViewPager extends Activity {
ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpagerlayout);
pager=(ViewPager) findViewById(R.id.view_pager);
MyAdapter adapter=new MyAdapter(this);
pager.setAdapter(adapter);
}
private boolean pagerMoved = false;
private static final long ANIM_VIEWPAGER_DELAY = 3000;
private Handler h = new Handler();
private Runnable animateViewPager = new Runnable() {
@Override
public void run() {
if (!pagerMoved) {
if(pager.getCurrentItem()==pager.getChildCount()){
pager.setCurrentItem(0,true);
}else {
pager.setCurrentItem(pager.getCurrentItem()+1, true);
}
h.postDelayed(animateViewPager, ANIM_VIEWPAGER_DELAY);
}
}
};
@Override
public void onPause() {
super.onPause();
if (h != null) {
h.removeCallbacks(animateViewPager);
}
}
@Override
public void onResume() {
super.onResume();
h.postDelayed(animateViewPager, ANIM_VIEWPAGER_DELAY);
}
}
class MyAdapter extends PagerAdapter{
Context mContext;
public TnCAdapter(Context context){
mContext=context;
}
@Override
public int getCount() {
return noOfSlides;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==((View)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
LayoutInflater inflater=(LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View rootview=inflater.inflate(R.layout.viewpager_view, container,false);
ImageView iv=(ImageView) rootview.findViewById(R.id.imageView1);
//Here set your image for every slide
switch (position) {
case 0:
iv.setBackgroundResource(R.drawable.scr0);
break;
case 1:
iv.setBackgroundResource(R.drawable.scr1);
break;
case 2:
iv.setBackgroundResource(R.drawable.scr2);
break;
}
((ViewPager)container).addView(rootview,0);
return rootview;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
((ViewPager)container).removeView((View) object);
}
}
}
和viewpagerlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/btn_tnc"
android:layout_alignParentLeft="true"
android:layout_below="@+id/indicator"
android:layout_marginTop="5dp"
android:isScrollContainer="true" >
</android.support.v4.view.ViewPager>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_gravity="center"
android:background="@drawable/ic_launcher" />
</LinearLayout>
和viewpager\u view.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/btn_tnc"
android:layout_alignParentLeft="true"
android:layout_below="@+id/indicator"
android:layout_marginTop="5dp"
android:isScrollContainer="true" >
</android.support.v4.view.ViewPager>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_gravity="center"
android:background="@drawable/ic_launcher" />
</LinearLayout>
尝试在MyAdapter类的
实例化项中设置位图图像。是的,ViewPager确实会更好。查看ViewPager.PageTransformer,在“幻灯片”之间可以看到漂亮的动画。谢谢,它与ViewPager配合得很好,还有一个动画。但是PageTransformer是如何工作的?@hassler23这里有一个很好的例子: