安卓:从SD卡ViewPager图库 [英] Android: ViewPager Gallery from sdcard

查看:194
本文介绍了安卓:从SD卡ViewPager图库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些code的ViewPager画廊,但是图像从绘制文件夹取,而我需要他们对SD卡的文件夹。

 保护整数[] = mImageIds {
        R.drawable.sample_1,
        R.drawable.sample_2,
        R.drawable.sample_3,
        R.drawable.sample_4,
        R.drawable.sample_5,
        R.drawable.sample_6,
        R.drawable.sample_7
};

这是code需要改变,如何从绘制文件夹图片来自SD卡替换这些?

展开code

 进口android.app.Activity;
进口android.content.Context;
进口android.content.res.TypedArray;
进口android.database.Cursor;
进口android.os.Bundle;
进口android.os.Handler;
进口android.provider.MediaStore;
进口android.support.v4.app.Fragment;
进口android.support.v4.app.FragmentActivity;
进口android.support.v4.app.FragmentManager;
进口android.support.v4.app.FragmentPagerAdapter;
进口android.support.v4.view.PagerAdapter;
进口android.support.v4.view.ViewPager;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
导入android.widget *。公共类主要扩展FragmentActivity实现AdapterView.OnItemSelectedListener,ViewPager.OnPageChangeListener {    私人ViewPager viewPager;
    私人画廊的画廊;    保护整数[] = mImageIds {
            R.drawable.sample_1,
            R.drawable.sample_2,
            R.drawable.sample_3,
            R.drawable.sample_4,
            R.drawable.sample_5,
            R.drawable.sample_6,
            R.drawable.sample_7
    };
    私人TextView的TextView的;
    私人处理程序处理程序;    / **
     *当第一次创建活动调用。
     * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        viewPager =(ViewPager)findViewById(R.id.view_pager);
        viewPager.setAdapter(新MyAdapter(getSupportFragmentManager()));
        viewPager.setOnPageChangeListener(本);        画廊=(图库论坛)findViewById(R.id.gallery);
        gallery.setAdapter(新ImageAdapter());
        gallery.setOnItemSelectedListener(本);        TextView的=(的TextView)findViewById(R.id.title);        处理器=新的处理程序();    }    //图库项目选择
    公共无效onItemSelected(适配器视图<>适配器视图,视图观点,INT I,长L){
        的updateUI(ⅰ);
    }    //查看传呼机项目选择
    公共无效使用onPageSelected(int i)以{
        的updateUI(ⅰ);
    }    私人无效的updateUI(最终INT I){
        handler.post(新的Runnable(){
            公共无效的run(){
                gallery.setSelection(ⅰ);
                viewPager.setCurrentItem(ⅰ);
                textView.setText(照片#+ I);
            }
        });
    }    公共无效onNothingSelected(适配器视图<>适配器视图){}    公共无效onPageScrolled(INT I,浮动V,INT I1){}    公共无效onPageScrollStateChanged(int i)以{}    公共类ImageAdapter延伸BaseAdapter {        公众诠释的getCount(){
            返回mImageIds.length;
        }        公共对象的getItem(INT位置){
            返回的位置;
        }        众长getItemId(INT位置){
            返回的位置;
        }        公共查看getView(INT位置,查看convertView,父母的ViewGroup){            ImageView的ImageView的=新ImageView的(Main.this);            imageView.setImageResource(mImageIds [位置]);
            imageView.setLayoutParams(新Gallery.LayoutParams(150,100));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);            返回ImageView的;
        }
    }    公共类MyAdapter扩展FragmentPagerAdapter {
        公共MyAdapter(FragmentManager FM){
            超(FM);
        }        @覆盖
        公众诠释的getCount(){
            返回mImageIds.length;
        }        @覆盖
        公共片段的getItem(最终诠释位置){
            返回新片段(){
                @覆盖
                公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
                    ImageView的ImageView的=新ImageView的(Main.this);
                    imageView.setImageResource(mImageIds [位置]);
                    返回ImageView的;
                }
            };
        }
    }
}


解决方案
而不是调用的

setImageResource ,电话 setImageDrawable 用位图您从SD卡装载。例如,创建一个位图从SD卡路径,然后 setImageDrawable

 位图位= BitmapFactory.de codeFILE(path_of_file);
imageView.setImageDrawable(位图);

请注意,图像解码不应该做的UI线程。 Android的文档讨论有效地加载图像关闭UI线程。在的AsyncTask 讨论可以修改,以满足您的需求有一行或两行线的变化。

I have some code for a ViewPager Gallery, however the images are taken from the drawable folder, whereas I need them from a folder on the sdcard.

protected Integer[] mImageIds = {
        R.drawable.sample_1,
        R.drawable.sample_2,
        R.drawable.sample_3,
        R.drawable.sample_4,
        R.drawable.sample_5,
        R.drawable.sample_6,
        R.drawable.sample_7
};

This is the code that needs changing, how do I replace these from drawable folder with images from sdcard?

Full Code

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;

public class Main extends FragmentActivity implements AdapterView.OnItemSelectedListener, ViewPager.OnPageChangeListener {

    private ViewPager viewPager;
    private Gallery gallery;

    protected Integer[] mImageIds = {
            R.drawable.sample_1,
            R.drawable.sample_2,
            R.drawable.sample_3,
            R.drawable.sample_4,
            R.drawable.sample_5,
            R.drawable.sample_6,
            R.drawable.sample_7
    };
    private TextView textView;
    private Handler handler;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        viewPager = (ViewPager) findViewById(R.id.view_pager);
        viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
        viewPager.setOnPageChangeListener(this);

        gallery = (Gallery) findViewById(R.id.gallery);
        gallery.setAdapter(new ImageAdapter());
        gallery.setOnItemSelectedListener(this);

        textView = (TextView) findViewById(R.id.title);

        handler = new Handler();

    }

    // gallery item selected
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        updateUI(i);
    }

    // view pager item selected
    public void onPageSelected(int i) {
        updateUI(i);
    }

    private void updateUI(final int i) {
        handler.post(new Runnable() {
            public void run() {
                gallery.setSelection(i);
                viewPager.setCurrentItem(i);
                textView.setText("Photo #" + i);
            }
        });
    }

    public void onNothingSelected(AdapterView<?> adapterView) {    }

    public void onPageScrolled(int i, float v, int i1) {    }

    public void onPageScrollStateChanged(int i) {    }

    public class ImageAdapter extends BaseAdapter {

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

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            ImageView imageView = new ImageView(Main.this);

            imageView.setImageResource(mImageIds[position]);
            imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);

            return imageView;
        }
    }

    public class MyAdapter extends FragmentPagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return mImageIds.length;
        }

        @Override
        public Fragment getItem(final int position) {
            return new Fragment() {
                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                    ImageView imageView = new ImageView(Main.this);
                    imageView.setImageResource(mImageIds[position]);
                    return imageView;
                }
            };
        }
    }


}

解决方案

Instead of calling setImageResource, call setImageDrawable with a bitmap you loaded from the sdcard. For example, create a Bitmap from a sdcard path and then setImageDrawable:

Bitmap bitmap = BitmapFactory.decodeFile(path_of_file);
imageView.setImageDrawable(bitmap);

Note, image decoding should not be done of the UI thread. The android documentation discuss efficiently loading images off the ui thread. The AsyncTask discussed can be modified to meet your needs with a one line or two line change.

这篇关于安卓:从SD卡ViewPager图库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆