近几年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;
}
}