栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

recyclerView+adapter+viewpaper实现滑动左右翻页

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

recyclerView+adapter+viewpaper实现滑动左右翻页

重点:

//1.这是R.layout.recycleview



	
	
	


//2.fragment中运用recyclerView
RecyclerView  recyclerView;

recyclerView = (RecyclerView) inflater.inflate(R.layout.recycleview, viewPager, false);//recyclerView的xml放在这里
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 6));//一行6个

mAdapter = new ManagerAdapter((List) mData, versionMap, mContext, index, HOME_ENTRANCE_PAGE_SIZE);


//3.adapter中

//用来连接adapter_app_list以及放入ViewHolder
@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder() called with: parent = [" + parent + "], viewType = [" + viewType + "]");
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_app_list,parent,false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }
	
	//用来修改UI的
	@Override
    public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") int position) {
        Log.d(TAG, "onBindViewHolder() called with: holder = [" + holder + "], position = [" + position + "]");
        this.holder = holder;
        this.position = position;
        res = mContext.getResources();
        recyclerViewData();
        if (progressBar!=null) {
            //progressBar  Listener
            progressBar.setOnAnimProgressListener(new CircularProgressView.OnAnimProgressListener() {
                @Override
                public void valueUpdate(int progress) {
                }s
            });
        }
    }
	
//重点在此方法中,参数可以自定义
 
    public ManagerAdapter(List data, Map versionMap, Context context, int index, int pageSize){
        Log.d(TAG, "ManagerAdapter() called with: data = [" + data.toString() + "], context = [" + context + "]");
        this.mData = data;
        this.mContext = context;
        this.mIndex = index;
        this.mPageSize = pageSize;
        this.versionMap = versionMap;
    }
	
	
	
	//第二个重点,用来定义UI参数的,呼应public class ManagerAdapter extends RecyclerView.Adapter implements Handler.Callback{中的ManagerAdapter.ViewHolder
	class ViewHolder extends RecyclerView.ViewHolder{
        ImageView imgIcon;
        TextView tvName;
        TextView tvVersion;
        TextView tvState;
        CircularProgressView progressBar;
        ImageView imgDel ;
        ImageView imgBgDelBlue;
        ImageView imgBgDelGrey;
        TextView btnState;

        public ViewHolder(View itemView) {
            super(itemView);
            Log.d(TAG, "ViewHolder() called with: itemView = [" + itemView + "]");
            imgIcon = itemView.findViewById(R.id.img_icon);
            tvName = itemView.findViewById(R.id.tv_name);
            tvVersion = itemView.findViewById(R.id.tv_version);
            tvState = itemView.findViewById(R.id.btn_state);
            progressBar = itemView.findViewById(R.id.bar_manager);
            imgDel = itemView.findViewById(R.id.img_icon_del);
            imgBgDelBlue = itemView.findViewById(R.id.bg_icon);
            imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
            btnState = itemView.findViewById(R.id.btn_state);
        }
    }

java

fragment(activity)

注意:LinearLayout.LayoutParams layoutParams12 = ...
        //首页菜单分页
        LinearLayout.LayoutParams entrancelayoutParams = ...
        homeEntranceLayout.setLayoutParams(entrancelayoutParams);
        viewPager.setLayoutParams(layoutParams12);

1.entrancelayoutParams的类型要是viewpaper父层的类型。

2.layoutParams12要是viewpaper的类型

其中包含item点击事件

private ManagerAdapter mAdapter = null;
    private RecyclerView recyclerView;
    private LinearLayout homeEntranceLayout;
    private ViewPager viewPager;
private void viewPagerPaging() {
        LinearLayout.LayoutParams layoutParams12 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) ((float) ScreenUtil.getScreenWidth() / 2.0f));
        //首页菜单分页
        LinearLayout.LayoutParams entrancelayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) ((float) ScreenUtil.getScreenWidth() / 2.0f + 70));
        homeEntranceLayout.setLayoutParams(entrancelayoutParams);
        viewPager.setLayoutParams(layoutParams12);
        LayoutInflater inflater = LayoutInflater.from(getContext());
        //将RecyclerView放至ViewPager中:
        int pageSize = HOME_ENTRANCE_PAGE_SIZE;
        //一共的页数等于 总数/每页数量,并取整。
        int pageCount = (int) Math.ceil(mData.size() * 1.0 / pageSize);
        List viewList = new ArrayList();

        for (int index = 0; index < pageCount; index++) {
            //每个页面都是inflate出一个新实例
            recyclerView = (RecyclerView) inflater.inflate(R.layout.recycleview, viewPager, false);
            recyclerView.setLayoutParams(layoutParams12);
            recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 6));

            mAdapter = new ManagerAdapter((List) mData, versionMap, mContext, index, HOME_ENTRANCE_PAGE_SIZE);
            mAdapter.setOnclick(new ManagerAdapter.ClickInterface() {
                @Override
                public void onButtonClick(View view, int position) {
                    Log.d(TAG, "onButtonClick() called with: Click Button - position:" + position + "name:" + mData.get(position).getName());
                    statusBtnClick(view, position);
                }

                @Override
                public void onIconClick(View view, int position) {
                    Log.d(TAG, "onIconClick() called with: Click Icon - position:" + position + "name:" + mData.get(position).getName());
                    View itemView = recyclerView.getLayoutManager().findViewByPosition(position);
                    TextView state = itemView.findViewById(R.id.btn_state);
                    ImageView imgDel = itemView.findViewById(R.id.img_icon_del);
                    ImageView imgBgDelBlue = itemView.findViewById(R.id.bg_icon);;
                    ImageView imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
                    if (state.getText().toString().equals(Constant.STATE_INSTALL)) {
                        imgDel.setVisibility(View.VISIBLE);
                        imgBgDelBlue.setVisibility(View.VISIBLE);
                        imgBgDelBlue.setAlpha(0.7f);
                        imgBgDelGrey.setVisibility(View.VISIBLE);
                        imgBgDelGrey.setAlpha(0.7f);
                        getPresenter().showDialogMsg(getString(R.string.DIALOG_BTN_DEL));
                    } else {
                        changeToOtherFragment(false, view, position);
                    }
                }
            });
            mAdapter.setOnLongClick(new ManagerAdapter.LongClickInterface() {
                @Override
                public void onIconLongClick(View view, int position) {
                    Log.d(TAG, "onIconLongClick() called with: view = [" + view + "], position = [" + position + "]");
                    mPosition = position;
                    getPresenter().showDialogMsg(Constant.DIALOG_BTN_DEL);
                }
            });
            recyclerView.setAdapter(mAdapter);
            recyclerView.setNestedScrollingEnabled(false);
            viewList.add(recyclerView);
        }

        ViewPagerAdapter adapter = new ViewPagerAdapter(viewList);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener((new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                Log.d(TAG, "onPageSelected() called with: position = [" + position + "]");
            }
        }));
    }

recyclerView的adapter

package com.fawcar.dlife6.appmarket.adapter;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.fawcar.dlife6.appmarket.R;
import com.fawcar.dlife6.appmarket.bean.Manager;
import com.fawcar.dlife6.appmarket.presenter.ManagerBasePresenter;
import com.fawcar.dlife6.appmarket.presenter.ManagerPresenter;
import com.fawcar.dlife6.appmarket.util.CircularProgressView;
import com.fawcar.dlife6.appmarket.util.Constant;
import com.fawcar.dlife6.appmarket.view.BaseView;
//import com.fawcar.dlife6.sotacore.manager.CheckManager;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.logging.LogManager;

public class ManagerAdapter extends RecyclerView.Adapter implements Handler.Callback{
    private static final String TAG = ManagerAdapter.class.getSimpleName();


    private List mData;
    private Context mContext;
    private Resources res;
    private ViewHolder holder;
    private int position;
    //页数下标,从0开始(通俗讲第几页)
    private int mIndex;
     //每页显示最大条目个数
    private int mPageSize;
    private ClickInterface clickInterface;
    private LongClickInterface longClickInterface;
    private Manager manager;
    private Handler handler;
    private int progress;
    private CircularProgressView progressBar;
    private TextView textView;
    private Runnable runnable;
    private Map versionMap;

    public ManagerAdapter(List data, Map versionMap, Context context, int index, int pageSize){
        Log.d(TAG, "ManagerAdapter() called with: data = [" + data.toString() + "], context = [" + context + "]");
        this.mData = data;
        this.mContext = context;
        this.mIndex = index;
        this.mPageSize = pageSize;
        this.versionMap = versionMap;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder() called with: parent = [" + parent + "], viewType = [" + viewType + "]");
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_app_list,parent,false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") int position) {
        Log.d(TAG, "onBindViewHolder() called with: holder = [" + holder + "], position = [" + position + "]");
        this.holder = holder;
        this.position = position;
        res = mContext.getResources();
        recyclerViewData();
        if (progressBar!=null) {
            //progressBar  Listener
            progressBar.setOnAnimProgressListener(new CircularProgressView.OnAnimProgressListener() {
                @Override
                public void valueUpdate(int progress) {
                }
            });
        }
    }

    private void recyclerViewData() {
        
        final int pos = position + mIndex * mPageSize;
        manager = mData.get(pos);
        String version = versionMap.get(manager.getSid());

        holder.tvName.setText(manager.getName());


        holder.tvVersion.setText("v"+version);

        if (manager.getCompare() > 0){
            holder.tvState.setText(Constant.STATE_UPDATE);
        }else if (manager.getCompare() == 0){
            holder.tvState.setText(Constant.STATE_OPEN);
        }else if (manager.getCompare() == -1){
            holder.tvState.setText(Constant.STATE_INSTALL);
        }else {
            holder.tvState.setText(Constant.STATE_INSTALLING);
        }

        //图片叠加
        setImgIcon();
        holder.imgIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (clickInterface != null){
                    clickInterface.onIconClick(v,pos);
                }
            }
        });
        holder.imgIcon.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                if (longClickInterface != null){
                    Log.d(TAG, "onLongClick() called with: view = [" + view + "]");
                    longClickInterface.onIconLongClick(view,pos);
                }
                return false;
            }
        });

        holder.tvState.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (clickInterface != null){
                    clickInterface.onButtonClick(v,pos);
                }
            }
        });

    }

    private void setImgIcon() {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) res.getDrawable(Integer.parseInt(manager.getIcon()),mContext.getTheme());
        Bitmap managerBitmap = bitmapDrawable.getBitmap();

        int width = holder.imgIcon.getBackground().getIntrinsicWidth();

        //设置图片透明度
        Paint paint = new Paint();
        paint.setAlpha(178); //设置透明程度

        Bitmap bgBitmapBlue = BitmapFactory.decodeResource(res, R.mipmap.bg_app_insatll_1);
        Bitmap bgBitmapGrey = BitmapFactory.decodeResource(res, R.mipmap.bg_app_install_3);
        Bitmap barBitmap;

        Bitmap newBitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
        Canvas cv = new Canvas(newBitmap);
        cv.drawBitmap(managerBitmap, 0, 0, null);
        cv.drawBitmap(bgBitmapBlue, 0, 0, paint);
        cv.drawBitmap(bgBitmapGrey, 0, 0, paint);

        String state = holder.tvState.getText().toString();
        switch (state){
            case Constant.STATE_INSTALLING:
                Log.d(TAG, "recyclerViewData() STATE_INSTALLING");
                holder.tvState.setAlpha(0.4f);
//                barBitmap = BitmapFactory.decodeResource(res, R.mipmap.bg_app_install_2);
//                cv.drawBitmap(barBitmap, width/4, width/4, null);
                holder.imgIcon.setImageBitmap(newBitmap);
                break;
            case Constant.STATE_DOWNLOADING:
                Log.d(TAG, "recyclerViewData() STATE_DOWNLOADING");
            case Constant.STATE_CONTINUE:
                Log.d(TAG, "recyclerViewData() STATE_CONTINUE");
//                barBitmap = BitmapFactory.decodeResource(res, R.mipmap.bg_app_downloading_1);
//                cv.drawBitmap(barBitmap, width/4, width/4, null);
                holder.imgIcon.setImageBitmap(newBitmap);
                holder.progressBar.setVisibility(View.VISIBLE);
                progressBar = holder.progressBar;
                textView = holder.tvState;
                excuteProgress();
                break;
            case Constant.STATE_INSTALL:
                Log.d(TAG, "recyclerViewData() STATE_INSTALL");
                holder.imgDel.setVisibility(View.VISIBLE);
                holder.imgBgDelBlue.setVisibility(View.VISIBLE);
                holder.imgBgDelGrey.setVisibility(View.VISIBLE);
                break;
            default:
                Log.d(TAG, "recyclerViewData() default");
                holder.imgIcon.setImageBitmap(managerBitmap);
                break;
        }
    }

    private void excuteProgress() {
        handler = new Handler(this);
        runnable = new Runnable() {
            @Override
            public void run() {
                handler.postDelayed(this, 50);
                handler.sendEmptyMessage(1);
            }
        };
        handler.postDelayed(runnable, 0);
    }

    @Override
    public boolean handleMessage(Message message) {
        switch (message.what){
            case 1:
                progress = message.arg1;
                if (progress == Constant.MAX_PROGRESS){
                    if (textView.getText().toString().equals(Constant.STATE_DOWNLOADING)){
                        textView.setText(Constant.STATE_INSTALLING);
                    }else if (textView.getText().toString().equals(Constant.STATE_INSTALLING)){
                        textView.setText(Constant.STATE_OPEN);
                    }

                    handler.removeCallbacks(runnable);
                }else {
                    progress ++;
                }
                progressBar.startAnimProgress(progress);
        }
        return false;
    }
    @Override
    public int getItemCount() {
        Log.d(TAG, "getItemCount() called");
        return mData.size() > (mIndex + 1) * mPageSize ? mPageSize : (mData.size() - mIndex * mPageSize);
    }

    @Override
    public long getItemId(int position) {
        Log.d(TAG, "getItemId() called with: position = [" + position + "]");
        return position + mIndex * mPageSize;
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        ImageView imgIcon;
        TextView tvName;
        TextView tvVersion;
        TextView tvState;
        CircularProgressView progressBar;
        ImageView imgDel ;
        ImageView imgBgDelBlue;
        ImageView imgBgDelGrey;
        TextView btnState;

        public ViewHolder(View itemView) {
            super(itemView);
            Log.d(TAG, "ViewHolder() called with: itemView = [" + itemView + "]");
            imgIcon = itemView.findViewById(R.id.img_icon);
            tvName = itemView.findViewById(R.id.tv_name);
            tvVersion = itemView.findViewById(R.id.tv_version);
            tvState = itemView.findViewById(R.id.btn_state);
            progressBar = itemView.findViewById(R.id.bar_manager);
            imgDel = itemView.findViewById(R.id.img_icon_del);
            imgBgDelBlue = itemView.findViewById(R.id.bg_icon);
            imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
            btnState = itemView.findViewById(R.id.btn_state);
        }
    }

    public void setOnclick(ClickInterface clickInterface){
        Log.d(TAG, "setOnclick() called with: clickInterface = [" + clickInterface + "]");
        this.clickInterface = clickInterface;
    }

    public void setOnLongClick(LongClickInterface longClick){
        Log.d(TAG, "setOnLongClick() called with: clickInterface = [" + clickInterface + "]");
        this.longClickInterface = longClick;
    }

    public interface ClickInterface{
        void onButtonClick(View view,int position);
        void onIconClick(View view ,int position);
    }

    public interface LongClickInterface{
        void onIconLongClick(View view ,int position);
    }




}

viewpaper的adapter

package com.fawcar.dlife6.appmarket.adapter;

import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class ViewPagerAdapter extends PagerAdapter {
    private static final String TAG = ViewPagerAdapter.class.getSimpleName();

    private List list;

    public ViewPagerAdapter(List list){
        Log.d(TAG, "ViewPagerAdapter() called with: list = [" + list + "]");
        this.list = list;
    }

    @Override
    public void destroyItem(ViewGroup container, int position,@NonNull Object object) {
        container.removeView(list.get(position));
        Log.d(TAG, "destroyItem() called with: container = [" + container + "], position = [" + position + "], object = [" + object + "]");
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull  ViewGroup container, int position) {
        container.addView(list.get(position));
        Log.d(TAG, "instantiateItem() called with: container = [" + container + "], position = [" + position + "]");
        return list.get(position);
    }

    @Override
    public int getCount() {
        Log.d(TAG, "getCount() called");
        if (list == null)
            return 0;
        return list.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        Log.d(TAG, "isViewFromObject() called with: view = [" + view + "], object = [" + object + "]");
        return view == object;
    }
}

xml

recyclerView


adapter





    
    
    
    

    
    

    

    

fragment(activity)



        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号