RecycleView實(shí)現(xiàn)各種尺寸圖片展示
本文實(shí)例為大家分享了RecycleView實(shí)現(xiàn)各種尺寸圖片展示的具體代碼,供大家參考,具體內(nèi)容如下
今天才發(fā)現(xiàn),在一個(gè)RecycleView里可以展示各種尺寸的圖片,貼圖如下:

代碼如下:
package com.hisense.movienow.HorizontalView;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import java.util.List;
/**
* Created by wangcm on 2018/11/13.
*/
public class SimpleRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = SimpleRecyclerAdapter.class.getSimpleName();
private LayoutInflater mInflater;
private List<VideoCateContent> mListOfApps;
private int currentPosition = 0;
private Context context;
public static enum ITEM_TYPE {
ITEM_TYPE_MOVIE,
ITEM_TYPE_APP,
ITEM_TYPE_CHANNEL
}
List<MovieCategory> movieCategories;
public SimpleRecyclerAdapter(Context context, List<VideoCateContent> mListOfApps){
mInflater = LayoutInflater.from(context);
this.context = context;
this.mListOfApps = mListOfApps;
}
public SimpleRecyclerAdapter(Context context, List<VideoCateContent> mListOfApps,List<MovieCategory> movieCategories){
mInflater = LayoutInflater.from(context);
this.context = context;
this.mListOfApps = mListOfApps;
this.movieCategories = movieCategories;
}
@SuppressWarnings("unused")
public void setData(List<VideoCateContent> mListOfApps){
this.mListOfApps = mListOfApps;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == ITEM_TYPE.ITEM_TYPE_MOVIE.ordinal()){
return new ViewHolder(mInflater.inflate(R.layout.movie_item_layout,parent,false));
}else if(viewType == ITEM_TYPE.ITEM_TYPE_CHANNEL.ordinal()){
return new ChanneHolder(mInflater.inflate(R.layout.search_channel_item,parent,false));
}else{
return new AppViewHolder(mInflater.inflate(R.layout.home_app_item,parent,false));
}
}
public int getItemViewType(int position){
if(mListOfApps != null){
if(mListOfApps.get(position).getType() != null && mListOfApps.get(position).getType().equalsIgnoreCase("app")){
return ITEM_TYPE.ITEM_TYPE_APP.ordinal();
}else if(mListOfApps.get(position).getType() != null && mListOfApps.get(position).getType().equals("Channel")){
return ITEM_TYPE.ITEM_TYPE_CHANNEL.ordinal();
}else {
return ITEM_TYPE.ITEM_TYPE_MOVIE.ordinal();
}
}else{
return ITEM_TYPE.ITEM_TYPE_MOVIE.ordinal();
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
final VideoCateContent videoCateContent = mListOfApps.get(position);
if(holder instanceof ViewHolder){
Glide.with(context).load(videoCateContent.getPoster()).into(((ViewHolder)holder).mImageView);
((ViewHolder)holder).mTextView.setText(videoCateContent.getTitle());
ViewGroup.LayoutParams params = ((ViewHolder)holder).mImageView.getLayoutParams();
ViewGroup.LayoutParams txtParams = ((ViewHolder)holder).mTextView.getLayoutParams();
if(videoCateContent.getPoster_type() == 0){//豎海報(bào)
params.width = 166;
txtParams.width = 166;
}else{
params.width = 444;
txtParams.width = 444;
// RecyclerView.ItemDecoration itemDecoration = ((RecyclerView)holder.itemView.getParent()).getItemDecorationAt(position);
}
if(videoCateContent.getIs_new() == 1){
((ViewHolder)holder).newImage.setVisibility(View.VISIBLE);
}else{
((ViewHolder)holder).newImage.setVisibility(View.GONE);
}
((ViewHolder)holder).mImageView.setLayoutParams(params);
((ViewHolder)holder).mTextView.setLayoutParams(txtParams);
holder.itemView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
currentPosition = (int) holder.itemView.getTag();
ViewCompat.animate(holder.itemView).scaleX(1.10f).scaleY(1.10f).start();
int bigPostion = 0;
if(movieCategories != null && movieCategories.size() != 0){
bigPostion = getCurrentIndex();
}
mOnItemSelectListener.onItemSelect(holder.itemView, position,bigPostion);
((ViewHolder)holder).mImageView.setBorderColor(context.getResources().getColor(R.color.white),context.getResources().getColor(R.color.black),context.getResources().getColor(R.color.app_text_color));
((ViewHolder)holder).mTextView.setSelected(true);
((ViewHolder)holder).mTextView.setTextColor(context.getResources().getColor(R.color.white));
((ViewHolder)holder).newImage.setPadding(3,3,0,0);
} else {
int bigPostion = 0;
if(movieCategories != null && movieCategories.size() != 0){
bigPostion = getCurrentIndex();
}
mOnItemNoSelectListener.onItemNoSelect(holder.itemView,position,bigPostion);
ViewCompat.animate(holder.itemView).scaleX(1.0f).scaleY(1.0f).start();
((ViewHolder)holder).mImageView.setBorderColor(context.getResources().getColor(R.color.trans),context.getResources().getColor(R.color.trans),context.getResources().getColor(R.color.trans));
((ViewHolder)holder).mTextView.setSelected(false);
((ViewHolder)holder).mTextView.setTextColor(context.getResources().getColor(R.color.title_color));
((ViewHolder)holder).newImage.setPadding(0,0,0,0);
}
}
});
}else if(holder instanceof AppViewHolder){
Glide.with(context).load(videoCateContent.getPoster()).into(((AppViewHolder)holder).mAppImageView);
((AppViewHolder)holder).tv_appName.setText(videoCateContent.getTitle());
holder.itemView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
currentPosition = (int) holder.itemView.getTag();
ViewCompat.animate(holder.itemView).scaleX(1.10f).scaleY(1.10f).start();
int bigPostion = 0;
if(movieCategories != null && movieCategories.size() != 0){
bigPostion = getCurrentIndex();
}
mOnItemSelectListener.onItemSelect(holder.itemView, position,bigPostion);
((AppViewHolder)holder).tv_appName.setVisibility(View.VISIBLE);
((AppViewHolder)holder).mAppImageView.setBorderColor(context.getResources().getColor(R.color.white),context.getResources().getColor(R.color.black),context.getResources().getColor(R.color.app_text_color));
} else {
int bigPostion = 0;
if(movieCategories != null && movieCategories.size() != 0){
bigPostion = getCurrentIndex();
}
mOnItemNoSelectListener.onItemNoSelect(holder.itemView,position,bigPostion);
ViewCompat.animate(holder.itemView).scaleX(1.0f).scaleY(1.0f).start();
((AppViewHolder)holder).tv_appName.setVisibility(View.GONE);
((AppViewHolder)holder).mAppImageView.setBorderColor(context.getResources().getColor(R.color.trans),context.getResources().getColor(R.color.trans),context.getResources().getColor(R.color.trans));
}
}
});
}else if(holder instanceof ChanneHolder){
Glide.with(context).load(videoCateContent.getPoster()).into(((ChanneHolder)holder).mChannelImg);
((ChanneHolder)holder).tv_channelName.setText(videoCateContent.getTitle());
holder.itemView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
currentPosition = (int) holder.itemView.getTag();
ViewCompat.animate(holder.itemView).scaleX(1.10f).scaleY(1.10f).start();
int bigPostion = 0;
if(movieCategories != null && movieCategories.size() != 0){
bigPostion = getCurrentIndex();
}
mOnItemSelectListener.onItemSelect(holder.itemView, position,bigPostion);
((ChanneHolder)holder).tv_channelName.setSelected(true);
((ChanneHolder)holder).mChannelImg.setBorderColor(context.getResources().getColor(R.color.white),context.getResources().getColor(R.color.black),context.getResources().getColor(R.color.app_text_color));
} else {
int bigPostion = 0;
if(movieCategories != null && movieCategories.size() != 0){
bigPostion = getCurrentIndex();
}
mOnItemNoSelectListener.onItemNoSelect(holder.itemView,position,bigPostion);
ViewCompat.animate(holder.itemView).scaleX(1.0f).scaleY(1.0f).start();
((ChanneHolder)holder).tv_channelName.setSelected(false);
((ChanneHolder)holder).mChannelImg.setBorderColor(context.getResources().getColor(R.color.trans),context.getResources().getColor(R.color.trans),context.getResources().getColor(R.color.trans));
}
}
});
}
// 設(shè)置itemView可以獲得焦點(diǎn)
holder.itemView.setFocusable(true);
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!CommonUtils.getInstance(context).isNetworkConnected()){
Toast.makeText(context,context.getResources().getString(R.string.no_net),Toast.LENGTH_SHORT).show();
return;
}
mOnItemClickListener.onItemClick(v, position);
if(videoCateContent.getHas_detail_page() == 1){
Intent intent = new Intent(context,DetailActivity.class);
intent.putExtra("media_id",videoCateContent.getId());
context.startActivity(intent);
}else if(videoCateContent.getType().equalsIgnoreCase(context.getString(R.string.App))){
String pkgName = getPackageName(videoCateContent.getTitle());
if(pkgName != null){
Log.e(TAG,"pkgName======="+pkgName);
// if(CommonUtils.getInstance(context).isInstalled(context,pkgName)){
CommonUtils.getInstance(context).openApp((MainActivity)context,pkgName);
// }
}else{
String searchStr = videoCateContent.getTitle();
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://search?q="+searchStr));
context.startActivity(intent);
}
}else{
if(!CommonUtils.getInstance(context).isNetworkConnected()){
Toast.makeText(context,context.getResources().getString(R.string.no_net),Toast.LENGTH_SHORT).show();
return;
}
HistoryBean historyBean = new HistoryBean();
historyBean.setWatchTime(System.currentTimeMillis());
historyBean.setVideoInfo(videoCateContent);
for(int i = 0; i< Constant.historyBeanList.size(); i++){
HistoryBean bean = Constant.historyBeanList.get(i);
if(bean.getVideoInfo().getId() == historyBean.getVideoInfo().getId()){
Constant.historyBeanList.remove(bean);
}
if(Constant.historyBeanList.size() >49){
if(i > 48){
Constant.historyBeanList.remove(i);
}
}
}
Constant.historyBeanList.add(0,historyBean);
SaveValue.getInstance(context).setDataList("history",Constant.historyBeanList);
Log.e(TAG,"deep_linking="+videoCateContent.getDeep_linking());
String deepLinking = videoCateContent.getDeep_linking();
if(deepLinking.contains("youtube")){
final String packageName = getPackageName("youtube");
if(!CommonUtils.getInstance(context).isInstalled(context,packageName)){
DialogHelper.getBaseDialogWithTextAndTitle("",context,"",new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent searchIntent= new Intent(Intent.ACTION_VIEW);
searchIntent.setData(Uri.parse("market://search?q="+packageName));
context.startActivity(searchIntent);
}
},new View.OnClickListener(){
@Override
public void onClick(View v) {
}
} ).show();
return;
}
String[] param = deepLinking.split("&");
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://************?"+param[param.length-1]));
webIntent.setPackage(packageName);
context.startActivity(webIntent);
}else{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse(videoCateContent.getDeep_linking());
intent.setData(uri);
context.startActivity(intent);
}
}
}
});
holder.itemView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// mOnItemKeyListener.OnItemKey(v, keyCode, event, currentPosition);
return false;
}
});
}
/*
* get app package name
* */
public String getPackageName(String title){
Log.e(TAG,"title="+title.substring(0,4));
for(int i=0;i<Constant.packageNames.length;i++){
String packageName = Constant.packageNames[i];
if(packageName.contains(title.substring(0,4).toLowerCase())){
return packageName;
}
}
return null;
}
@Override
public int getItemCount() {
return mListOfApps.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
LinearLayout ll_movieItem;
BoundsImageView mImageView;
TextView mTextView;
ImageView newImage;
ViewHolder(View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.movie_image);
mTextView = itemView.findViewById(R.id.movie_title);
newImage = itemView.findViewById(R.id.iv_newFlag);
}
}
class AppViewHolder extends RecyclerView.ViewHolder{
BoundsImageView mAppImageView;
TextView tv_appName;
AppViewHolder(View itemView) {
super(itemView);
mAppImageView = itemView.findViewById(R.id.iv_app);
tv_appName = itemView.findViewById(R.id.tv_appName);
}
}
class ChanneHolder extends RecyclerView.ViewHolder{
BoundsImageView mChannelImg;
TextView tv_channelName;
public ChanneHolder(View itemView) {
super(itemView);
mChannelImg = itemView.findViewById(R.id.iv_channel);
tv_channelName = itemView.findViewById(R.id.tv_channelName);
}
}
private OnItemSelectListener mOnItemSelectListener;
private OnItemClickListener mOnItemClickListener;
private OnItemLongClickListener mOnItemLongClickListener;
private OnItemKeyListener mOnItemKeyListener;
private OnItemNoSelectListener mOnItemNoSelectListener;
public interface OnItemSelectListener {
void onItemSelect(View view, int position,int bigPosition);
}
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public interface OnItemLongClickListener {
void onItemLongClick(View view, int position);
}
public interface OnItemKeyListener {
void OnItemKey(View view, int keyCode, KeyEvent event, int position);
}
public interface OnItemNoSelectListener {
void onItemNoSelect(View view, int position,int bigPosition);
}
public void setOnItemNoSelectListener(OnItemNoSelectListener listener){
mOnItemNoSelectListener = listener;
}
public void setOnItemSelectListener(OnItemSelectListener listener){
mOnItemSelectListener = listener;
}
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
this.mOnItemLongClickListener = mOnItemLongClickListener;
}
public void setOnItemKeyListener(OnItemKeyListener mOnItemKeyListener) {
this.mOnItemKeyListener = mOnItemKeyListener;
}
public int getCurrentIndex(){
for(int i=0;i<movieCategories.size();i++){
MovieCategory movieCategory = movieCategories.get(i);
if(movieCategory.getMovieItemList().equals(mListOfApps)){
return i;
}
}
return 0;
}
}
另外一種顯示方式:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android使用相機(jī)實(shí)現(xiàn)拍照存儲(chǔ)及展示功能詳解
這篇文章主要介紹了Android使用相機(jī)實(shí)現(xiàn)拍照存儲(chǔ)及展示功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01
Android實(shí)現(xiàn)APP自動(dòng)更新功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)APP自動(dòng)更新功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android 解決WebView多進(jìn)程崩潰的方法
這篇文章主要介紹了Android 解決WebView多進(jìn)程崩潰的方法,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-03-03
Android ShimmerLayout實(shí)現(xiàn)微光效果解析
這篇文章主要為大家詳細(xì)介紹了Android ShimmerLayout實(shí)現(xiàn)微光效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Android使用Jetpack Compose開發(fā)零基礎(chǔ)起步教程
Jetpack Compose是用于構(gòu)建原生Android UI的現(xiàn)代工具包。Jetpack Compose使用更少的代碼,強(qiáng)大的工具和直觀的Kotlin API,簡(jiǎn)化并加速了Android上的UI開發(fā)2023-04-04
Kotlin基本類型自動(dòng)裝箱一點(diǎn)問(wèn)題剖析
這篇文章主要剖析了Kotlin基本類型自動(dòng)裝箱的一點(diǎn)問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例
這篇文章主要介紹了Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例,包括xml配置文件及功能代碼的實(shí)現(xiàn),需要的朋友可以參考下2014-10-10

