recycleview+cardview+button特效(1)

recycleview+cardview 的效果实现了带图片的卡片式,想要在这个效果之上再加一个类似于Button点击效果。本项目引用了开源项目Goodview,其地址为:https://github.com/venshine/GoodView
如果,我们直接import这个项目进入我们的android Studio 的话,一般都会出错,所以建议引用的话,可以自己组建项目,然后将其的布局和java文件,和gradle中的引用添加到新项目中。
实现步骤;新建项目;cardrecycleview
1.导入,recycleview,cardview.
implementation ‘com.android.support:recyclerview-v7:28.0.0’
implementation ‘com.android.support:cardview-v7:28.0.0’
注意,项目的版本。更具自己可以做调整。
2.将主布局文件:(默认名;mainactivity.xml)设置为recycleview.代码如下:

<android.support.v7.widget.RecyclerView
    android:id="@+id/news_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    />

`
3.设置Cardview.xml.新建一个.xml文件命名为cardview.设置。我将其设置为一图片+两个textview.代码如下。

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_margin="5dp"
    app:cardCornerRadius="5dp"
    app:elevation="1dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/news_container"
        android:orientation="horizontal"
        android:padding="5dp"
        >



    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/news_thumb"

        android:layout_margin="5dp"

        />
        <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:orientation="vertical"
        >



    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/news_title"
        android:layout_marginTop="5dp"

        android:textSize="16sp"

        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/news_info"

        android:layout_marginTop="30dp"

        android:textSize="14sp"

        />
<ImageView
    android:id="@+id/news_good"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/collection"
    android:layout_marginLeft="250dp"
     android:onClick="collection"
    android:clickable="true"/>
        </LinearLayout>
    </LinearLayout>

</android.support.v7.widget.CardView>

</android.support.v7.widget.CardView>`
4.新建User.java(与Main.java同目录)
建一个User类来传递参数,和拿到布局中的id:

public class User {
    private String news_title;
    private String news_info;
    private int news_thumbid;
    




    public User(String news_title, String news_info, int news_thumbid,int news_good) {
        this.news_title = news_title;
        this.news_info = news_info;
        this.news_thumbid = news_thumbid;
  
    }
    

    public String getNews_title() {
        return news_title;
    }

    public void setNews_title(String news_title) {
        this.news_title = news_title;
    }

    public String getNews_info() {
        return news_info;
    }

    public void setNews_info(String news_info) {
        this.news_info = news_info;
    }

    public int getNews_thumbid() {
        return news_thumbid;
    }

    public void setNews_thumbid(int news_thumbid) {
        this.news_thumbid = news_thumbid;
    }
}

5.在main.java中进行主要工作

import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
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 com.wx.goodview.GoodView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    List<User> data;//声明变量
     


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView =findViewById(R.id.news_list);//拿到recycleview
        data= new ArrayList<>();//向每一个cardview中加数据。
        data.add(new User("毡帽系列","此系列服装有点cute,像不像小车夫。",R.drawable.i1,R.mipmap.collection));
        data.add(new User("蜗牛系列","宝宝变成了小蜗牛,爬啊爬啊爬啊。",R.drawable.i2,R.mipmap.collection));
        data.add(new User("小蜜蜂系列","小蜜蜂,小蜜蜂,飞到西,飞到东。",R.drawable.i3,R.mipmap.collection));
        data.add(new User("毡帽系列","此系列服装有点cute,像不像小车夫。",R.drawable.i4,R.mipmap.collection));
        data.add(new User("蜗牛系列","宝宝变成了小蜗牛,爬啊爬啊爬啊。",R.drawable.i5,R.mipmap.collection));
        data.add(new User("小蜜蜂系列","小蜜蜂,小蜜蜂,飞到西,飞到东。",R.drawable.i6,R.mipmap.collection));
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        NewsListAdapter adapter= new NewsListAdapter();
        recyclerView.setAdapter(adapter);

    }
    

       


    class NewsListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
        GoodView mGoodView;

         


        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View itemview = LayoutInflater.from(MainActivity.this).from(viewGroup.getContext()).inflate(R.layout.cardview,viewGroup,false);
             final ViewHolder holder=new ViewHolder(itemview);
            holder.news_title.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        User user=(User) holder.itemView.getTag();
        Toast.makeText(getApplicationContext(),user.getNews_title(), Toast.LENGTH_SHORT).show();
    }
});
            holder.news_info.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    User user=(User) holder.itemView.getTag() ;
                    Toast.makeText(getApplicationContext(), user.getNews_info(), Toast.LENGTH_SHORT).show();
                }
            });





            return  holder;
        }

        @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
          User user = data.get(position);
            if (null==user)
                return;
            ViewHolder viewHolder = (ViewHolder) holder;
            viewHolder.news_title.setText(user.getNews_title());
            viewHolder.news_good.setImageResource(user.getNews_good());

            viewHolder.news_info.setText(user.getNews_info());
            viewHolder.news_thumb.setImageResource(user.getNews_thumbid());
            viewHolder.itemView.setTag(user);
        }

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

        public class ViewHolder extends RecyclerView.ViewHolder{
            TextView news_title;
            ImageView news_thumb;
            TextView news_info;
            ImageView news_good;


            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                news_good=itemView.findViewById(R.id.news_good);
                news_title = itemView.findViewById(R.id.news_title);
                news_thumb =  itemView.findViewById(R.id.news_thumb);
                news_info = itemView.findViewById(R.id.news_info);
                itemView.findViewById(R.id.news_container).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                    }
                });


            }
        }

    }
}

这样就实现了,前两个效果,下一篇我们来再此基础上实现button点击效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值