Ранее я написал статью о том, как создать сетку изображений в виде галереи с помощью Ionic Framework , но что если мы захотим сделать то же самое с помощью собственного Android SDK?
В этом уроке мы увидим, как использовать Android GridView с адаптером изображений для отображения удаленных изображений из Интернета.
Как и во всех моих уроках, мы будем использовать только терминал и текстовый редактор. Так что нет IDE, таких как Android Studio или Eclipse. Из командной строки или терминала запустите следующее:
android create project --activity MainActivity --package com.nraboy.imagegrid --path ./ImageGrid --target android-19 --gradle --gradle 0.11.+
В приведенной выше команде вы заметите, что мы создаем наш проект с намерением использовать Gradle вместо Apache Ant .
Давайте начнем с простых вещей в первую очередь. В вашем недавно созданном проекте откройте файл src / res / AndroidManifest.xml и добавьте интернет-разрешение следующим образом:
<uses-permission android:name="android.permission.INTERNET" />
Мы делаем это, потому что мы будем отображать изображения непосредственно из Интернета.
Выше приведено изображение того, что нам нужно для этого примера.
Когда дело доходит до разработки этого приложения, давайте начнем с XML-кода представления Android. Откройте файл вашего проекта sssrc / res / layout / main.xml и добавьте его, заменив его следующим кодом:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="115dp"
android:numColumns="auto_fit"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:stretchMode="columnWidth"
android:gravity="center" />
Мы создаем Android, GridView
где каждый столбец сетки будет иметь 115dp
размер и 5dp x 5dp
интервал.
А GridView
в Android заполняется с помощью какой-либо формы адаптера. В этом случае мы будем создавать наш собственный адаптер. Создайте файл src / main / java / com / nraboy / imagegrid / ImageAdapter.java и добавьте следующий код:
package com.nraboy.imagegrid;
import android.app.*;
import android.os.*;
import android.widget.*;
import java.util.*;
import android.graphics.*;
import android.view.*;
import android.content.*;
public class ImageAdapter extends BaseAdapter {
private Context context;
private ArrayList<Bitmap> bitmapList;
public ImageAdapter(Context context, ArrayList<Bitmap> bitmapList) {
this.context = context;
this.bitmapList = bitmapList;
}
public int getCount() {
return this.bitmapList.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(this.context);
imageView.setLayoutParams(new GridView.LayoutParams(115, 115));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageBitmap(this.bitmapList.get(position));
return imageView;
}
}
В приведенном выше коде , мы, по существу , принимая ArrayList
из Bitmap
и назначая содержание в любой данный индекс к определенной ячейке в сетке. Нам повезло, что getView
функция определяет текущий вид и позицию. Вид, являющийся клеткой.
Это приводит нас к MainActivity
классу, который мы создали при сборке нашего проекта из командной строки. Мы собираемся захватить сетку из нашего XML и заполнить ее изображениями по нашему выбору. Откройте файл src / main / java / com / nraboy / imagegrid / MainActivity.java и добавьте следующий код:
package com.nraboy.imagegrid;
import android.app.Activity;
import android.os.Bundle;
import android.graphics.*;
import java.util.*;
import java.net.*;
import android.widget.*;
public class MainActivity extends Activity {
private GridView imageGrid;
private ArrayList<Bitmap> bitmapList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.imageGrid = (GridView) findViewById(R.id.gridview);
this.bitmapList = new ArrayList<Bitmap>();
this.imageGrid.setAdapter(new ImageAdapter(this, this.bitmapList));
}
}
Подожди секунду! Как мы собираемся получить наши изображения там? Мы назначаем наш пользовательский адаптер для сетки, но в нем нет изображений ArrayList
. В этом конкретном примере мы собираемся загружать наши изображения непосредственно из Интернета. Вы можете загружать растровые изображения по своему усмотрению.
private Bitmap urlImageToBitmap(String imageUrl) throws Exception {
Bitmap result = null;
URL url = new URL(imageUrl);
if(url != null) {
result = BitmapFactory.decodeStream(url.openConnection().getInputStream());
}
return result;
}
Вышеприведенная функция берет удаленное изображение из URL и загружает его как растровое изображение. Итак, все вместе в нашем MainActivity
классе, у нас есть следующее:
package com.nraboy.imagegrid;
import android.app.Activity;
import android.os.Bundle;
import android.graphics.*;
import java.util.*;
import java.net.*;
import android.widget.*;
public class MainActivity extends Activity {
private GridView imageGrid;
private ArrayList<Bitmap> bitmapList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.imageGrid = (GridView) findViewById(R.id.gridview);
this.bitmapList = new ArrayList<Bitmap>();
try {
for(int i = 0; i < 10; i++) {
this.bitmapList.add(urlImageToBitmap("http://placehold.it/150x150"));
}
} catch (Exception e) {
e.printStackTrace();
}
this.imageGrid.setAdapter(new ImageAdapter(this, this.bitmapList));
}
private Bitmap urlImageToBitmap(String imageUrl) throws Exception {
Bitmap result = null;
URL url = new URL(imageUrl);
if(url != null) {
result = BitmapFactory.decodeStream(url.openConnection().getInputStream());
}
return result;
}
}
Я выбрал просто загрузить десять общих изображений заполнителей в приведенном выше коде.
Чтобы построить это, в своем терминале или командной строке выполните следующую команду Gradle:
./gradlew assemble
У вас должен быть файл ImageGrid-debug.apk, созданный в каталоге build / output / apk.
Вывод
Создать сетку изображений с помощью родного Android не так уж и сложно. Если вы не отставали от моих руководств, то теперь вы видели собственный метод Android, а также гибридный метод с Ionic Framework . Мы заполнили нашу сетку изображений, используя удаленные изображения из Интернета, загруженные в растровую форму.