RecyclerView实现九宫格和点击事件

来源:互联网 发布:申通面单打印软件 编辑:程序博客网 时间:2024/06/01 09:18

想要实现的效果如下:

开始界面:

点击界面展示:


在屏幕中间弹出一个对话框,效果就如同将图片放大一样。不过当然,这里的图片放大并非真正意义上的拉伸,而是展示出较大的那张图片。

若是不打算用两张图片,也可以自定义大小,这里因为只是简单的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下载链接





1 2
原创粉丝点击