RecyclerView实现九宫格和点击事件

想要实现的效果如下:

开始界面:

《RecyclerView实现九宫格和点击事件》

点击界面展示:

《RecyclerView实现九宫格和点击事件》

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

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

    原文作者:九宫格问题
    原文地址: https://blog.csdn.net/Giousa/article/details/50963225
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞