Android学习教程之九宫格图片展示(13)

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

MainActivity.java代码:

package siso.ninegridimg;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 }
}

GridStyleActivity.java代码:

package siso.ninegridimg;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import com.jaeger.ninegridimageview.NineGridImageView;
import com.jaeger.ninegridimgdemo.R;
import com.jaeger.ninegridimgdemo.adapter.PostAdapter;
import com.jaeger.ninegridimgdemo.entity.Post;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by Jaeger on 16/2/24.
 *
 * Email: chjie.jaeger@gamil.com
 * GitHub: https://github.com/laobie
 */
public class GridStyleActivity extends AppCompatActivity {

 private RecyclerView mRvPostLister;
 private PostAdapter mNineImageAdapter;

 private List<Post> mPostList;
 private String[] IMG_URL_LIST = {
 "http://ac-QYgvX1CC.clouddn.com/36f0523ee1888a57.jpg",
 "http://ac-QYgvX1CC.clouddn.com/07915a0154ac4a64.jpg",
 "http://ac-QYgvX1CC.clouddn.com/9ec4bc44bfaf07ed.jpg",
 "http://ac-QYgvX1CC.clouddn.com/fa85037f97e8191f.jpg",
 "http://ac-QYgvX1CC.clouddn.com/de13315600ba1cff.jpg",
 "http://ac-QYgvX1CC.clouddn.com/15c5c50e941ba6b0.jpg",
 "http://ac-QYgvX1CC.clouddn.com/10762c593798466a.jpg",
 "http://ac-QYgvX1CC.clouddn.com/eaf1c9d55c5f9afd.jpg",
 "http://ac-QYgvX1CC.clouddn.com/ad99de83e1e3f7d4.jpg",
 "http://ac-QYgvX1CC.clouddn.com/233a5f70512befcc.jpg",
 };

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_recycler);
 setSupportActionBar((Toolbar) findViewById(R.id.toolbar));

 mRvPostLister = (RecyclerView) findViewById(R.id.rv_post_list);
 mRvPostLister.setLayoutManager(new LinearLayoutManager(this));

 mPostList = new ArrayList<>();
 for (int i = 0; i < 18; i++) {
 List<String> imgUrls = new ArrayList<>();
 imgUrls.addAll(Arrays.asList(IMG_URL_LIST).subList(0, i % 9));
 Post post = new Post("Am I handsome? Am I handsome? Am I handsome?", imgUrls);
 mPostList.add(post);
 }

 mNineImageAdapter = new PostAdapter(this, mPostList, NineGridImageView.STYLE_GRID);
 mRvPostLister.setAdapter(mNineImageAdapter);
 }
}

FillStyleActivity.java代码:

package siso.ninegridimg;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import com.jaeger.ninegridimageview.NineGridImageView;
import com.jaeger.ninegridimgdemo.R;
import com.jaeger.ninegridimgdemo.adapter.PostAdapter;
import com.jaeger.ninegridimgdemo.entity.Post;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by Jaeger on 16/2/24.
 *
 * Email: chjie.jaeger@gamil.com
 * GitHub: https://github.com/laobie
 */
public class FillStyleActivity extends AppCompatActivity {

 private RecyclerView mRvPostLister;
 private PostAdapter mPostAdapter;

 private List<Post> mPostList;
 private String[] IMG_URL_LIST = {
 "https://pic4.zhimg.com/02685b7a5f2d8cbf74e1fd1ae61d563b_xll.jpg",
 "https://pic4.zhimg.com/fc04224598878080115ba387846eabc3_xll.jpg",
 "https://pic3.zhimg.com/d1750bd47b514ad62af9497bbe5bb17e_xll.jpg",
 "https://pic4.zhimg.com/da52c865cb6a472c3624a78490d9a3b7_xll.jpg",
 "https://pic3.zhimg.com/0c149770fc2e16f4a89e6fc479272946_xll.jpg",
 "https://pic1.zhimg.com/76903410e4831571e19a10f39717988c_xll.png",
 "https://pic3.zhimg.com/33c6cf59163b3f17ca0c091a5c0d9272_xll.jpg",
 "https://pic4.zhimg.com/52e093cbf96fd0d027136baf9b5cdcb3_xll.png",
 "https://pic3.zhimg.com/f6dc1c1cecd7ba8f4c61c7c31847773e_xll.jpg",
 };

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_recycler);
 setSupportActionBar((Toolbar) findViewById(R.id.toolbar));

 mRvPostLister = (RecyclerView) findViewById(R.id.rv_post_list);
 mRvPostLister.setLayoutManager(new LinearLayoutManager(this));

 mPostList = new ArrayList<>();
 for (int i = 0; i < 18; i++) {
 List<String> imgUrls = new ArrayList<>();
 imgUrls.addAll(Arrays.asList(IMG_URL_LIST).subList(0, i % 9 + 1));
 Post post = new Post("看图,字不重要。想看大图?抱歉我还没做这个 ( •̀ .̫ •́ )", imgUrls);
 mPostList.add(post);
 }
 mPostAdapter = new PostAdapter(this, mPostList, NineGridImageView.STYLE_FILL);
 mRvPostLister.setAdapter(mPostAdapter);
 }
}

PostAdapter.java代码:

package siso.ninegridimg.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

import siso.ninegridimg.R;
import siso.ninegridimg.entity.Post;
import siso.nineimglib.NineGridImageView;
import siso.nineimglib.NineGridImageViewAdapter;

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
 private LayoutInflater mInflater;
 private List<Post> mPostList;
 private int mShowStyle;

 public PostAdapter(Context context, List<Post> postList, int showStyle) {
 super();
 mPostList = postList;
 mInflater = LayoutInflater.from(context);
 mShowStyle = showStyle;
 }

 @Override
 public void onBindViewHolder(PostViewHolder holder, int position) {
 holder.bind(mPostList.get(position));
 }

 @Override
 public int getItemCount() {
 return mPostList.size();
 }

 @Override
 public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 if (mShowStyle == NineGridImageView.STYLE_FILL) {
 return new PostViewHolder(mInflater.inflate(R.layout.item_post_fill_style, parent, false));
 } else {
 return new PostViewHolder(mInflater.inflate(R.layout.item_post_grid_style, parent, false));
 }
 }

 public class PostViewHolder extends RecyclerView.ViewHolder {
 private NineGridImageView mNglContent;
 private TextView mTvContent;

 private NineGridImageViewAdapter<String> mAdapter = new NineGridImageViewAdapter<String>() {
 @Override
 protected void onDisplayImage(Context context, ImageView imageView, String s) {
 Picasso.with(context)
  .load(s)
  .placeholder(R.drawable.ic_default_image)
  .into(imageView);
 }

 @Override
 protected ImageView generateImageView(Context context) {
 return super.generateImageView(context);
 }

 @Override
 protected void onItemImageClick(Context context, int index, List<String> list) {
 Toast.makeText(context, "image position is " + index, Toast.LENGTH_SHORT).show();
 }
 };

 public PostViewHolder(View itemView) {
 super(itemView);
 mTvContent = (TextView) itemView.findViewById(R.id.tv_content);
 mNglContent = (NineGridImageView) itemView.findViewById(R.id.ngl_images);
 mNglContent.setAdapter(mAdapter);
 }

 public void bind(Post post) {
 mNglContent.setImagesData(post.getImgUrlList());
 mTvContent.setText(post.getContent());
 }
 }
}

Post.java代码:

package siso.ninegridimg.entity;

import java.util.List;

public class Post {
 private String mContent;
 private List<String> mImgUrlList;

 public Post() {
 }

 public Post(String content, List<String> imgUrlList) {
 mContent = content;
 mImgUrlList = imgUrlList;
 }

 public String getContent() {
 return mContent;
 }

 public void setContent(String content) {
 mContent = content;
 }

 public List<String> getImgUrlList() {
 return mImgUrlList;
 }

 public void setImgUrlList(List<String> imgUrlList) {
 mImgUrlList = imgUrlList;
 }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context="siso.ninegridimg.MainActivity">

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Hello World!" />
</RelativeLayout>

item_post_fill_style.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ngl="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:background="@color/white"
android:orientation="vertical"
android:padding="8dp">

<TextView
 android:id="@+id/tv_content"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginBottom="8dp"
 android:textColor="#333333"
 android:textSize="16sp"/>

<com.jaeger.ninegridimageview.NineGridImageView
 android:id="@+id/ngl_images"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 ngl:imgGap="3dp"
 ngl:showStyle="fill"
 ngl:singleImgSize="160dp"/>
</LinearLayout>

item_post_grid_style.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_margin="8dp"
 android:background="@color/white"
 android:orientation="vertical"
 android:padding="8dp">

 <TextView
 android:id="@+id/tv_content"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginBottom="8dp"
 android:textColor="#333333"
 android:textSize="16sp"
 tools:text="测试文字"/>

 <com.jaeger.ninegridimageview.NineGridImageView
 android:id="@+id/ngl_images"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 app:imgGap="3dp"
 app:maxSize="-1"
 app:showStyle="grid"
 app:singleImgSize="500dp"/>
</LinearLayout>

item_single_image.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:maxHeight="60dp"
 android:maxWidth="60dp"
 android:orientation="vertical">
 <ImageView
 android:id="@+id/iv_single"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:scaleType="fitStart"/>

</LinearLayout>

strings.xml

<resources>
 <string name="app_name">NineGridImg</string>

 <string name="fill_style">Fill Style</string>
 <string name="grid_style">Grid Style</string>
</resources>

styles.xml

<resources>

 <!-- Base application theme. -->
 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 <!-- Customize your theme here. -->
 <item name="colorPrimary">@color/colorPrimary</item>
 <item name="android:textAllCaps">false</item>
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 <item name="colorAccent">@color/colorAccent</item>
 <item name="windowNoTitle">true</item>
 <item name="android:textColor">@color/white</item>
 <item name="windowActionBar">false</item>
 </style>

</resources>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="siso.ninegridimg">

 <application
 android:allowBackup="true"
 android:icon="@mipmap/ic_launcher"
 android:label="@string/app_name"
 android:supportsRtl="true"
 android:theme="@style/AppTheme">
 <activity android:name=".MainActivity">
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />

 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>
 </application>

</manifest>

build.gradle

apply plugin: 'com.android.application'

android {
 compileSdkVersion 23
 buildToolsVersion "23.0.1"

 defaultConfig {
 applicationId "siso.ninegridimg"
 minSdkVersion 22
 targetSdkVersion 22
 versionCode 1
 versionName "1.0"
 }
 buildTypes {
 release {
 minifyEnabled false
 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
 }
 }
}

dependencies {
 compile fileTree(include: ['*.jar'], dir: 'libs')
 testCompile 'junit:junit:4.12'
 compile 'com.android.support:appcompat-v7:23.0.1'
 compile 'com.android.support:recyclerview-v7:23.3.0'
 compile 'com.squareup.picasso:picasso:2.5.2'
 compile project(path: ':nineimglib')
}

Android类库项目nineimglib

项目运行结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android布局案例之人人android九宫格

    人人android是人人网推出的一款优秀的手机应用软件,我们在使用的时候发现他的首页布局是九宫格模式的,让人觉得很别致,因为现在很多的 android软件很少使用这种布局模式,人人android使用的很成功,使人觉得简洁大方美观,下面我们来看看人人android的布局 其实这种布局是使用了一种叫"GridView"的表格布局,下面我来给大家讲一下: 首先,请大家理解一下"迭代显示"这个概念,这个好比布局嵌套,我们在一个大布局里面重复的放入一些布局相同的小布局,那些重

  • 轻松实现安卓(Android)九宫格解锁

    效果图 思路 首先我们来分析一下实现九宫格解锁的思路:当用户的手指触摸到某一个点时,先判断该点是否在九宫格的某一格范围之内,若在范围内,则该格变成选中的状态:之后用户手指滑动的时候,以该格的圆心为中心,用户手指为终点,两点连线.最后当用户手指抬起时,判断划过的九宫格密码是否和原先的密码匹配. 大致的思路流程就是上面这样的了,下面我们可以来实践一下. Point 类 我们先来创建一个 Point 类,用来表示九宫格锁的九个格子.除了坐标 x ,y 之外,还有三种模式:正常模式.按下模式和错误模式.

  • Android 九宫格的实现方法

    1.xml代码: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:orientation="vertical"      android:layout_width="fill

  • Android编程之九宫格实现方法实例分析

    本文实例讲述了Android编程之九宫格实现方法.分享给大家供大家参考,具体如下: 显示九宫格需要用GridView , 要显示每个格子中的视图有两种方式,第一种方式是做成xml文件,再将xml文件做成视图.第二种方式就是在代码中构建出这样一种布局,这里采用第一种方式来实现: GridView: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="ht

  • Android打造流畅九宫格抽奖活动效果

    因为company项目中需要做九宫格抽奖活动,以前都没有做过类似的功能,虽然之前在浏览大神们的博客中,无意中也看到了好多关于抽奖的项目,但因为项目中没有需要,一直都没有点击进去看.这次不去看估计不行.直到公司计划要做抽奖功能,才迫不得已上网查找demo 网上找了大半天,好不容易找到了几个demo,下载下来,解压缩包发现竟然里面空空如也,只有几张九宫格的图片,害我白白浪费了几个CSDN积分.后面在eoe网站那发现了一个demo,于是好开心,下载下来后马上导入到工程中,运行看了效果,九宫格是出来了,

  • 轻松实现Android自定义九宫格图案解锁

    Android实现九宫格图案解锁,自带将图案转化成数字密码的功能,代码如下: LockPatternView.java package com.jackie.lockpattern; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.text.TextUtils; i

  • Android九宫格程序设计代码

    本文介绍九宫格程序的设计代码. 一.相关介绍 (一)效果显示 1.程序刚运行时的效果: 2.在页面上点击选择并滑动时的画面 3.选择密码之后的显示 (二)功能介绍 1.点击某圆圈后,在该圆圈的中心添加一个实行的小圆. 2.页面滑动出现一条跟随的线. 3.滑动到另一个圆圈时,产生一条连接的直线. 4.选择的圆圈点数大于等于4个后,手指抬起,就会保存密码. 4.选择的圆圈的数是最大值后,马上保存密码. (三)涉及到的知识点 本示例使用的是自定义的View来绘制九宫格,并保存图像,这里的九个点分别代表

  • Android开发之实现GridView支付宝九宫格

    先给大家展示下关于仿支付宝钱包首页中带有分割线的gridview,俗称九宫格 的效果图,怎么样是不是和你想象的一样啊.在你的预料之中就继续访问以下代码内容吧. 我们都知道ListView设置分割线是非常容易的,设置ListView的分割线颜色和宽度,只需要在布局中定义android:divider和android:dividerHeight属性即可.而GridView并没有这样的属性和方法,那我们改如何来做呢? 我们小编在做这个效果之前,也参考了其他的一些方案,比如说定义一个自定义的GridVi

  • Android实现九宫格解锁的方法

    相信大家都有使用九宫格解锁,比如在设置手机安全项目中,可以使用九宫格解锁,提高安全性,以及在使用支付功能的时候,为了提高安全使用九宫锁,今天就为大家介绍Android实现九宫格的方法,分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: 布局文件如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas

  • Android实现九宫格(GridView中各项平分空间)的方法

    本文实例讲述了Android实现九宫格(GridView中各项平分空间)的方法.分享给大家供大家参考.具体如下: 项目需要做一个九宫格(也不一定是9的,4宫格.16宫格.4x3宫格...),封了 一个宫格,它能够根据为它分配的空间来自动的调节宫中各项的尺寸. 从TableLayout集成来的,因此如果你直接在设计器上使用该封装的话需要把它自动加进去的那几个TableRow删除一下. 类名为AdvancedGridView,代码如下: import android.content.Context;

随机推荐