从SD卡或内部存储显示图像查看寻呼机android

问题描述:

有一个活动,从可绘制的文件夹中读取图像,并在幻灯片放映视图中显示它们。下面是我的代码。现在我想从我的SD卡或内部存储器中显示图像到viewpager。在下面的代码中应该做些什么改变才能读取SD卡或内部存储器中的图像,并将它们以幻灯片的形式显示在viewpager中。从SD卡或内部存储显示图像查看寻呼机android

活动

public class MainActivity extends AppCompatActivity { 
    ViewPager viewPager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     setContentView(R.layout.activity_main); 

     viewPager = (ViewPager) findViewById(R.id.viewPager); 

     ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this); 

     viewPager.setAdapter(viewPagerAdapter); 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new MyTimerTask(), 3000,3000); 

    } 
    public class MyTimerTask extends TimerTask { 

     @Override 
     public void run() { 

      MainActivity.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        if (viewPager.getCurrentItem() == 0) { 
         viewPager.setCurrentItem(1); 
        } else if (viewPager.getCurrentItem() == 1) { 
         viewPager.setCurrentItem(2); 
        } else if (viewPager.getCurrentItem() == 2) { 
         viewPager.setCurrentItem(3); 
        } else if (viewPager.getCurrentItem() == 3) { 
         viewPager.setCurrentItem(4); 
        } else { 
          viewPager.setCurrentItem(0); 
         } 

        } 


       ; 

      }); 
     } 
    } 
} 

ViewPagerAdapter

public class ViewPagerAdapter extends PagerAdapter { 

    private Context context; 
    private LayoutInflater layoutInflater; 
    private Integer [] images = {R.drawable.index1,R.drawable.index2,R.drawable.index3,R.drawable.index4,R.drawable.index5}; 

    public ViewPagerAdapter(Context context) { 

     this.context = context; 
    } 
    @Override 
    public int getCount() { 

     return images.length; 
    } 
    @Override 
    public boolean isViewFromObject(View view, Object object) { 

     return view == object; 
    } 
    @Override 
    public Object instantiateItem(ViewGroup container, final int position) { 

     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = layoutInflater.inflate(R.layout.custom_layout, null); 
     ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
     imageView.setImageResource(images[position]); 


     ViewPager vp = (ViewPager) container; 
     vp.addView(view, 0); 
     return view; 
    } 
    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 

     ViewPager vp = (ViewPager) container; 
     View view = (View) object; 
     vp.removeView(view); 

    } 
} 
+1

检查了这一点:https://*.com/a/11237382/5402482 –

+0

太复杂了,林困惑 – emin

+0

@emin,首先需要基本上有一个函数来将图像加载为位图。之后,你可以把它们放在任何你想要的地方。 –

您可以使用毕加索从SD卡载入图像。莅临指导:
Picasso Library

你的情况:

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); // retrieve the storage dir 
    Picasso.with(context).load(new File(baseDir + File.separator + your_filename)).into(imageView); 
+0

我的代码的哪一部分应添加此代码,适配器页面? – emin

+0

根据你的代码,我基本上会得到一个名字为aded的字符串列表,每当我加载一张图片时,我将它添加到毕加索(your_filename)的路径中。但你可以随心所欲地做到这一点。 –

+0

我有我的SD卡中的图像文件(文件名是图像),图像名称是index1.png,index2.png,..直到index5.png,你能改进我的代码吗,请 – emin