RecyclerView实现九宫格和点击事件
2016-03-23 14:52
260 查看
想要实现的效果如下:
开始界面:
![](http://img.blog.csdn.net/20160323145201142)
点击界面展示:
![](http://img.blog.csdn.net/20160323145217624)
在屏幕中间弹出一个对话框,效果就如同将图片放大一样。不过当然,这里的图片放大并非真正意义上的拉伸,而是展示出较大的那张图片。
若是不打算用两张图片,也可以自定义大小,这里因为只是简单的demo,也为了让图片效果更加清晰,就没有使用这个方法,有兴趣的话可以去试试。
代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.ut.youtuimagedemo.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eaeaea">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
grid_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.ut.youtuimagedemo.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eaeaea">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
MainActivity:
package com.ut.youtuimagedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
/**
* Created by Giousa on 2016/3/23.
*/
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.recycler);
}
private void initData() {
GridLayoutManager layoutManager = new GridLayoutManager(this,3);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(new MyAdapter(this));
mRecyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {
@Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
}
});
}
}
MyAdapter:
package com.ut.youtuimagedemo;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.io.InputStream;
/**
* Created by Giousa on 2016/3/23.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ListHolder>{
private Context mContext;
int iconA[] = {R.drawable.a00,R.drawable.a01,R.drawable.a02,R.drawable.a03,R.drawable.a04,
R.drawable.a05, R.drawable.a06,R.drawable.a07,R.drawable.a08,R.drawable.a09,
R.drawable.a10, R.drawable.a11};
int iconB[] = {R.drawable.b00,R.drawable.b01,R.drawable.b02,R.drawable.b03,R.drawable.b04,
R.drawable.b05, R.drawable.b06,R.drawable.b07,R.drawable.b08,R.drawable.b09,
R.drawable.b10, R.drawable.b11};
public MyAdapter(Context context) {
this.mContext = context;
}
@Override
public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.grid_item, null);
return new ListHolder(view);
}
@Override
public void onBindViewHolder(ListHolder holder, int position) {
holder.setData(position);
}
@Override
public int getItemCount() {
return iconA.length;
}
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag();
Log.d("已被点击", "位置:" + position);
final AlertDialog dialog = new AlertDialog.Builder(mContext).create();
ImageView imgView = getView(position);
dialog.setView(imgView);
dialog.show();
// 点击图片消失
imgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
}
};
private ImageView getView(int position) {
ImageView imgView = new ImageView(mContext);
imgView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
InputStream is = mContext.getResources().openRawResource(iconB[position]);
Drawable drawable = BitmapDrawable.createFromStream(is, null);
imgView.setImageDrawable(drawable);
return imgView;
}
class ListHolder extends RecyclerView.ViewHolder {
ImageView icon;
public ListHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(onClickListener);
icon = (ImageView) itemView.findViewById(R.id.pic);
}
public void setData(int position){
itemView.setTag(position);
icon.setImageResource(iconA[position]);
}
}
}
Demo下载链接
开始界面:
点击界面展示:
在屏幕中间弹出一个对话框,效果就如同将图片放大一样。不过当然,这里的图片放大并非真正意义上的拉伸,而是展示出较大的那张图片。
若是不打算用两张图片,也可以自定义大小,这里因为只是简单的demo,也为了让图片效果更加清晰,就没有使用这个方法,有兴趣的话可以去试试。
代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.ut.youtuimagedemo.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eaeaea">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
grid_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.ut.youtuimagedemo.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eaeaea">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
MainActivity:
package com.ut.youtuimagedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
/**
* Created by Giousa on 2016/3/23.
*/
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.recycler);
}
private void initData() {
GridLayoutManager layoutManager = new GridLayoutManager(this,3);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(new MyAdapter(this));
mRecyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {
@Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
}
});
}
}
MyAdapter:
package com.ut.youtuimagedemo;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.io.InputStream;
/**
* Created by Giousa on 2016/3/23.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ListHolder>{
private Context mContext;
int iconA[] = {R.drawable.a00,R.drawable.a01,R.drawable.a02,R.drawable.a03,R.drawable.a04,
R.drawable.a05, R.drawable.a06,R.drawable.a07,R.drawable.a08,R.drawable.a09,
R.drawable.a10, R.drawable.a11};
int iconB[] = {R.drawable.b00,R.drawable.b01,R.drawable.b02,R.drawable.b03,R.drawable.b04,
R.drawable.b05, R.drawable.b06,R.drawable.b07,R.drawable.b08,R.drawable.b09,
R.drawable.b10, R.drawable.b11};
public MyAdapter(Context context) {
this.mContext = context;
}
@Override
public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.grid_item, null);
return new ListHolder(view);
}
@Override
public void onBindViewHolder(ListHolder holder, int position) {
holder.setData(position);
}
@Override
public int getItemCount() {
return iconA.length;
}
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag();
Log.d("已被点击", "位置:" + position);
final AlertDialog dialog = new AlertDialog.Builder(mContext).create();
ImageView imgView = getView(position);
dialog.setView(imgView);
dialog.show();
// 点击图片消失
imgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
}
};
private ImageView getView(int position) {
ImageView imgView = new ImageView(mContext);
imgView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
InputStream is = mContext.getResources().openRawResource(iconB[position]);
Drawable drawable = BitmapDrawable.createFromStream(is, null);
imgView.setImageDrawable(drawable);
return imgView;
}
class ListHolder extends RecyclerView.ViewHolder {
ImageView icon;
public ListHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(onClickListener);
icon = (ImageView) itemView.findViewById(R.id.pic);
}
public void setData(int position){
itemView.setTag(position);
icon.setImageResource(iconA[position]);
}
}
}
Demo下载链接
相关文章推荐
- copssh的安装与卸载 不能正常启动问题解决
- BC Round #76 HDU 5646(数学)
- Cg入门2:profile和基本数据类型
- 第三周作业(三):wc程序
- NodeJs 发送request请求 设置Cookie
- 分组交换 的理解
- wsprintf妙用
- HRBUST 2085 囧 分型法
- Java基础 transient关键字
- Servlet的特点及运行过程
- linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)
- 【jQuery源码】整体架构
- iOS开发小技巧
- 根据用户身份证获取信息(php)
- 初始javascript闭包
- 【bzoj3675】[Apio2014]序列分割 单调队列+斜率优化
- 使用DOM方法递归遍历节点树
- MPEG-4, moving picture expert group 避免软弱无力的表达
- ios关于数据库第三方框架FMDB进阶用法
- 一致性哈希算法与Java实现