2013-06-04 70 views
1

嗨有一个活动,从可绘制文件夹中读取图像,并在viewpager中显示它们。下面是我的代码。现在我想将SD卡中的图像显示在viewpager中。在下面的代码中应该做些什么改变来从SD卡读取图像并将它们显示在viewpager中。从SD卡显示图像查看寻呼机android

public class TestClass extends Activity { 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.testclass); 
    ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra); 
     ViewPager myPager = (ViewPager) findViewById(R.id.viewpager_testclass); 
     myPager.setAdapter(adapter); 
     myPager.setCurrentItem(0); 


     } 


private int imageArra[] = { 

     R.drawable.a01, 
     R.drawable.a02, 
     R.drawable.a03 
}; 

这里是PagerAdapter

public class ViewPagerAdapter extends PagerAdapter { 
Activity activity; 
int imageArray[]; 

public ViewPagerAdapter(Activity act, int[] imgArra) { 
    imageArray = imgArra; 
    activity = act; 
} 

public int getCount() { 
    return imageArray.length; 
} 

public Object instantiateItem(View collection, int position) { 
    ImageView view = new ImageView(activity); 
    view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
    LayoutParams.FILL_PARENT)); 
    view.setScaleType(ScaleType.FIT_XY); 
    view.setBackgroundResource(imageArray[position]); 
    ((ViewPager) collection).addView(view, 0); 
    return view; 
} 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 
} 

回答

0

尝试改变view.setBackgroundResource(imageArray [位置]); 至view.setImageResource(imageArray [position]);

因为后台资源不被ScaleType影响

+0

你的意思是'视图.setImageResoure(...)'对吗?他正在使用资源ID .. – bricklore

+0

是的,没有Eclipse rig rig here :)从我的记忆中获取:) –

+0

“从我的记忆中获取” - 我也是:P – bricklore

0

首先,你应该使用

view.setImageResource(imageArray[position]); 

而不是

view.setBackgroundResource(imageArray[position]); 

但是,回到你的问题:
设置图像您可以使用SD卡上的图像:

//also works for png, bmp, ... 
view.setImageBitmap(BitmapFactory.decodeFile("/path/to/image.jpg")); 

因此您可以将int[] imageArray更改为String[] stringArray的图像路径。
或者,如果你想使用资源的ID以及图像路径,
你可以试试这个:

在识别TestClass:

public class TestClass extends Activity { 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.testclass); 
    ViewPagerAdapter adapter = new ViewPagerAdapter(this, indexArray, imageArray); 
    ViewPager myPager = (ViewPager) findViewById(R.id.viewpager_testclass); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(0); 
} 


int[] indexArray = { //you could use boolean for memory savings.. 
    1, 0, 1, 0 //1 == path; 0 == resource 
} 

Object[] imageArray = { 
    (Object)"imagepath/0/img.png", 
    (Object)R.drawable.a01 
    (Object)"imagepath/1/img.jpg", 
    (Object)R.drawable.a02 
} 

在PagerAdapter:

public class ViewPagerAdapter extends PagerAdapter { 
    Activity activity; 
    int[] indexArray; 
    Object[] imageArray; 

    public ViewPagerAdapter(Activity act, int[] indArray, Object[] imgArray) { 
     indexArray = indArray; 
     imageArray = imgArray; 
     activity = act; 
    } 

    //... 

    public Object instantiateItem(View collection, int position) { 
     ImageView view = new ImageView(activity); 
     view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
     view.setScaleType(ScaleType.FIT_XY); 

     switch (indexArray[position]) { //or use if and else if -- just like you want 
      case 0: 
       view.setImageResource((int)imageArray[position]); 
       break; 

      case 1: 
       view.setImageBitmap(BitmapFactory.decodeFile((String)imageArray[position])); 
       break; 
     } 

     ((ViewPager)collection).addView(view, 0); 
     return view; 
    } 

    //... 
} 
+0

谢谢@ Schnizel1337为您提供帮助。不过,我找到了简单的方法来做到这一点。它在这里 http://jameszhao84.iteye.com/blog/1344584 – MajorGeek

相关问题