ViewPager的使用

近几年Android的更新速度真的快 ,瞬间都感觉自己已经老了 ,跟不上学习的步伐,或者说可以慢一点,沉淀下学习的知识 ,

新的框架,第三方引入包的使用让应用开发更加得心应手,由于很多第三方的库封装的都比较严重,二次修改变得比较复杂 ,毕竟是别人是根据自己的需求来定制的 ,

       昨天就遇到一个 ,一个需要点击listView之后,显示图片,需要有左滑右滑切换图片,当时第一个想到就就是项目中正在使用的banner框架 ,后来就遇到一个问题,bannner传入的是一个列表集合 ,不好定位到哪一张开始,后来还是老老实实的使用ViewPager算 了, 使用ViewPager我第一个想到的就是加载大图必定会OOM,这是一个经验过来的感觉,这个问题必须要解决,需要想办法解决图片缓存,清理缓存的问题,这个我没有多想,还是用框架吧,Glide。下面就是代码了,

布局文件,在右下角放一个计数的功能,迎来显示当前的进度

<?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:background="@color/black"
    android:orientation="vertical">

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

    <RelativeLayout
        android:layout_width="@dimen/dimen_70"
        android:layout_height="@dimen/dimen_70"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="@dimen/dimen_10"
        android:layout_marginRight="@dimen/dimen_10"
        android:background="@mipmap/rect_circle_circle">

        <TextView
            android:id="@+id/tv_current_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="0/0"
            android:textColor="@color/white"
            android:textSize="25sp" />

    </RelativeLayout>


</RelativeLayout>

界面代码,比较简单,就不解释了。

package com.mirror.activity;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.mirror.R;
import com.mirror.adapter.ImageShowAdapter;
import com.mirror.util.SharedPerManager;
import com.mirror.view.ad.VideoLocaEntity;

import java.util.ArrayList;
import java.util.List;

public class ImageShowActivity extends BaseActivity implements ViewPager.OnPageChangeListener {

    List<VideoLocaEntity> listsMedia = new ArrayList();
    public static final String TAG_LOCAL_MEDIA = "TAG_LOCAL_MEDIA";
    public static final String TAG_SHOW_POSITION = "TAG_SHOW_POSITION";
    ViewPager view_pager;
    private ArrayList<ImageView> mImageList = new ArrayList<>();
    ImageShowAdapter adapter;
    TextView tv_current_show;

    @Override
    protected void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(R.layout.activity_image_show);
        initView();
    }

    private void initView() {
        Intent intent = getIntent();
        listsMedia = intent.getParcelableArrayListExtra(TAG_LOCAL_MEDIA);
        getImageData();
        int currentPosition = intent.getIntExtra(TAG_SHOW_POSITION, 0);
        tv_current_show = (TextView) findViewById(R.id.tv_current_show);
        view_pager = (ViewPager) findViewById(R.id.view_pager);
        adapter = new ImageShowAdapter(mImageList);
        view_pager.setAdapter(adapter);//第二步:设置viewpager适配器
        view_pager.setOnPageChangeListener(this);
        view_pager.setCurrentItem(currentPosition);
        tv_current_show.setText((currentPosition + 1) + "/" + (listsMedia.size()));
    }

    private void getImageData() {
        for (int i = 0; i < listsMedia.size(); i++) {
            ImageView imageView = new ImageView(this);
            Glide.with(ImageShowActivity.this).load(listsMedia.get(i).getFilePath()).into(imageView);
            mImageList.add(imageView);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

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

    @Override
    public void onPageSelected(int i) {
        tv_current_show.setText((i + 1) + "/" + (listsMedia.size()));
    }

    @Override
    public void onPageScrollStateChanged(int i) {
    }
}

==========适配器Adapter代码================

package com.mirror.adapter;


import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.ImageView;

import java.util.ArrayList;

public class ImageShowAdapter extends PagerAdapter {
    private ArrayList<ImageView> viewList;

    public ImageShowAdapter(ArrayList<ImageView> viewList) {
        this.viewList = viewList;
    }

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

    @Override
    public Object instantiateItem(View container, int position) {
        ImageView imageView = viewList.get(position);
        ((ViewPager) container).addView(imageView);
        return imageView;
    }

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

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


}

猜你喜欢

转载自blog.csdn.net/fkgjdkblxckvbxbgb/article/details/81223172