PhotoView+viewpager+Picasso+glide

1.添加依賴

compile 'com.loopj.android:android-async-http:1.4.9'
compile 'com.squareup.picasso:picasso:2.5.1'
compile 'com.github.bumptech.glide:glide:3.5.2'
jar包

compile files('libs/uk-co-senab-photoview.jar')
2.佈局

   1.activity_main.xml

<GridView
    android:id="@+id/gv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:numColumns="3"></GridView>
  2.item.xml

<ImageView
    android:id="@+id/iv"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:scaleType="centerCrop"/>
3.activity_image_browse.xml

<android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

4.photo_view.xml

<uk.co.senab.photoview.PhotoView
    android:id="@+id/pv"
    android:layout_width="wrap_content"
    android:scaleType="centerCrop"
    android:layout_height="wrap_content"
    />
3.代碼

public class MainActivity extends AppCompatActivity {

    private GridView gv;
    private ArrayList<String> images = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        gv = (GridView) findViewById(R.id.gv);
        getdata();

        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MainActivity.this, ImageBrowseActivity.class);
                intent.putStringArrayListExtra("images",images);
                intent.putExtra("position", position);
                startActivity(intent);
            }
        });
    }

    private void getdata() {
        AsyncHttpClient client = new AsyncHttpClient();
        String url = "https://mock.eolinker.com/success/gIbgeNycc15SNh5mrSNTGC2Tr5WTUsCM";
        client.get(this, url, new TextHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                try {
                    JSONObject jsonObject = new JSONObject(responseString);
                    JSONArray data = jsonObject.getJSONArray("data");
                    for (int i = 0;i<data.length();i++){
                        String image_url = data.getJSONObject(i).getString("image_url");
                        images.add(image_url);
                    }
                    ImageAdapter imageAdapter = new ImageAdapter(MainActivity.this, data);
                    gv.setAdapter(imageAdapter);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private class ImageAdapter extends BaseAdapter{
        Context context;
        JSONArray data;
        public ImageAdapter(Context context,JSONArray data) {
            this.context = context;
            this.data = data;
        }

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

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

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = View.inflate(context,R.layout.item,null);
            ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
            try {
                String image_url = data.getJSONObject(position).getString("image_url");
                Picasso.with(context).load(image_url).placeholder(R.mipmap.ic_launcher).into(iv);

            } catch (Exception e) {
                e.printStackTrace();
            }
            return convertView;
        }
    }
}

public class ImageBrowseActivity extends AppCompatActivity {

    private ArrayList<String> images;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_browse);
        ViewPager vp = (ViewPager) findViewById(R.id.vp);
        Intent intent = getIntent();
        int position = intent.getIntExtra("position", 0);
        images = intent.getStringArrayListExtra("images");
        MyAdapter myAdapter = new MyAdapter();
        vp.setAdapter(myAdapter);
        vp.setCurrentItem(position);//設置當前
    }

    public class MyAdapter extends PagerAdapter{

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

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

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view = View.inflate(ImageBrowseActivity.this,R.layout.photo_view,null);
            PhotoView pv = (PhotoView) view.findViewById(R.id.pv);
            String url = images.get(position);
            Glide.with(ImageBrowseActivity.this).load(url).into(pv);
            container.addView(view);
            return view;
        }

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章