app\src\main\res\layout\activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".Main2Activity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v7.widget.GridLayout
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:columnCount="3"
>
</android.support.v7.widget.GridLayout>
</LinearLayout>
</ScrollView>
Main2Activity.java
package com.example.xxxx;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.support.v7.widget.GridLayout;
import android.widget.ImageView;
import java.util.List;
public class Main2Activity extends AppCompatActivity {
ImageView imageLast;
int imgMargin = 2;
static int imageHeight = 0;
static Bitmap[] imageBitmap;
static ImageView[] imageViews;
@Override
public void onBackPressed() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
List<String> imgs = ImagePool.getImagesList();
imageBitmap = new Bitmap[imgs.size()];
imageViews = new ImageView[imgs.size()];
imageHeight = getResources().getDisplayMetrics().widthPixels / 3;
new LoadImageTask().execute();
LoadMore();
}
public void LoadMore(){
List<String> imgs = ImagePool.getImagesList();
GridLayout grid = findViewById(R.id.grid);
ImageView imageView = null;
for (int i = 0; i < imgs.size(); i++) {
imageView = new ImageView(this);
imageView.setBackgroundResource(R.color.colorBlack);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
//指定平分的布局样式
GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams(
GridLayout.spec(GridLayout.UNDEFINED, 1f),
GridLayout.spec(GridLayout.UNDEFINED, 1f));
layoutParams.height = imageHeight;
layoutParams.width = 0;
//设置一些Margin
layoutParams.setMargins(imgMargin, imgMargin, imgMargin, imgMargin);
//将布局样式应用到ImageView
imageView.setLayoutParams(layoutParams);
grid.addView(imageView);
imageViews[i] = imageView;
imageView.setTag(i);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int idx = (int) v.getTag();
ImagePool.setIndex(idx);
Jump(v);
}
});
}
if (imageView!=null) {
imageLast = imageView;
}
}
public void Jump(View view){
Intent intent = new Intent();
intent.setClass(Main2Activity.this, Main3Activity.class);
startActivity(intent);
}
static class LoadImageTask extends AsyncTask<Integer, Integer, String> {
@Override
protected String doInBackground(Integer... integers) {
List<String> images = ImagePool.getImagesList();
int start = 0;
for( int i=0;i<images.size();i++ ) {
imageBitmap[i] = ImageUtil.getExtractBitmap(images.get(i).replaceFirst("file://",""), imageHeight, imageHeight);
if (i%21==0 || i== images.size() - 1) {
this.publishProgress(start, i);
start = i+1;
}
}
return "执行完成";
}
@Override
protected void onProgressUpdate(Integer... progress) {
//这个函数在doInBackground调用publishProgress时触发,虽然调用时只有一个参数
//但是这里取到的是一个数组,所以要用progesss[0]来取值
//第n个参数就用progress[n]来取值
for(int i=progress[0];i<=progress[1];i++) {
imageViews[i].setImageBitmap(imageBitmap[i]);
}
super.onProgressUpdate(progress);
}
@Override
protected void onPostExecute(String result) {
//doInBackground返回时触发,换句话说,就是doInBackground执行完后触发
//这里的result就是上面doInBackground执行后的返回值,所以这里是"执行完毕"
super.onPostExecute(result);
}
}
}
ImagePool.java
package com.example.administrator.tunpage;
import android.os.Environment;
import android.text.TextUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ImagePool {
public static List<String> imageList;
private static int index = 1;
public static void setIndex(int idx){
index = idx;
}
public static int getIndex(){
return index;
}
public static List<String> getImagesList(){
if( imageList!=null && imageList.size()>0 ) {
return imageList;
}
imageList = new ArrayList<>();
File file = null;
// Check for SD Card
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED))
{
// error
}
else
{
file = new File(Environment.getExternalStorageDirectory()
.getPath() + "/images" );
}
addFolderToURLList( file , imageList);
return imageList;
}
private static void addFolderToURLList(File file, List<String> imageList) {
if (file.isDirectory())
{
File[] listFile = file.listFiles();
String filePath = null;
String newPath = null;
for (int i = 0; i < listFile.length; i++)
{
File filei = listFile[i];
if ( filei.isDirectory() ) {
addFolderToURLList(filei,imageList);
} else {
filePath = listFile[i].getAbsolutePath();
if(filePath.endsWith(".jpg") ) {
imageList.add("file://" + filePath);
}
}
}
}
}
}
ImageUtil.java
package com.example.administrator.tunpage;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.media.ThumbnailUtils;
import java.io.InputStream;
public class ImageUtil {
public static Bitmap getExtractBitmap(String path,
int width, int height) {
// 获取这个图片的宽和高信息到options中, 此时返回bm为空
Bitmap bitmap = BitmapFactory.decodeFile(path);
//利用Bitmap对象创建缩略图
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height);
return bitmap;
}
}