编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> Android开发 -> 轮播图记录篇 -> 正文阅读

[Android开发]轮播图记录篇



RecyclerView做的一个轮播效果,适配器有视图缓存,避免了一些内存问题
首先是借助 PagerSnapHelper 让RecyclerView每次只滑动一个,然后添加一个指示器,这里指示器是动态生成的,自己做了个简单的view
很简单的一个效果,直接上代码

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_indicator_point_selected"
    android:gravity="center"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

    <com.hanmaker.bryan.hc.widget.LinIndicate
        android:id="@+id/lin_indicate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center_horizontal"
        android:gravity="center"
        android:orientation="horizontal"/>

</FrameLayout>


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/d20.0">

    <com.hanmaker.bryan.hc.widget.MyPhotoView android:id="@+id/img_icon"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:layout_gravity="center" />

</FrameLayout>





public class ImageListAdapter extends BaseQuickAdapter<String,BaseViewHolder> {

    private CallBack callBack;

    public ImageListAdapter(int layoutResId,CallBack callBack) {
        super(layoutResId);
        this.callBack = callBack;
    }

    @Override
    protected void convert(BaseViewHolder helper, String item) {

        if (item != null && !item.isEmpty()){
            MyPhotoView img =helper.getView(R.id.img_icon);
            GlideApp.with(AndroidApplication.getInstance().getApplicationContext())
                    .load(item)
                    .skipMemoryCache(true)
                    .fitCenter()
                    .into(img);
            img.setOnPhotoTapListener((view, x, y) -> callBack.click());
        }

    }

    public interface CallBack{
        void click();
    }


}

View Code




@Override
    protected void initData() {
        Bundle bundle = getArguments();
        ArrayList<String> list = bundle.getStringArrayList("Photo");
        int position = bundle.getInt("Photo_p", 0);
        adapter = new ImageListAdapter(R.layout.item_imagelist, new ImageListAdapter.CallBack() {
            @Override
            public void click() {
                if (getActivity() != null) {
                    getActivity().finish();
                }
            }
        });
        adapter.addData(list);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
        recyclerView.setLayoutManager(linearLayoutManager);
        linearLayoutManager.scrollToPositionWithOffset(position, 0);
        linearLayoutManager.setStackFromEnd(true);
        recyclerView.setAdapter(adapter);
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (newState == RecyclerView.SCROLL_STATE_IDLE && lin_indicate != null) {//不滑动的时候,避免多次触发
                    int lastItemPosition = linearLayoutManager.findLastCompletelyVisibleItemPosition();
                    lin_indicate.setIndicatePosition(lastItemPosition);
                }
            }
        });
        new PagerSnapHelper().attachToRecyclerView(recyclerView);
        int count = list.size();
        lin_indicate.load(count,position);
        adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                if (getActivity() != null) {
                    getActivity().finish();
                }
            }
        });
    }

View Code




public class LinIndicate extends LinearLayout {


    public LinIndicate(Context context) {
        super(context);
    }

    public LinIndicate(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public LinIndicate(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void load(int count){
        removeAllViews();
        for (int i = 0; i < count; i++) {
            ImageView imageView = new ImageView(getContext());
            ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            imageView.setLayoutParams(params);
            imageView.setPadding(10,10,10,20);
            addView(imageView);
        }
    }

    /**
     * @param count 指示器数量
     * @param position 默认显示下标
     */
    public void load(int count,int position){
        removeAllViews();
        for (int i = 0; i < count; i++) {
            ImageView imageView = new ImageView(getContext());
            ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            imageView.setLayoutParams(params);
            imageView.setPadding(10,10,10,20);
            addView(imageView);
        }
        setIndicatePosition(position);
    }

    public void setIndicatePosition(int position){
        int count = getChildCount();
        if (position > count)
            return;
        for (int i = 0; i < count; i++) {
            ImageView imageView = (ImageView) getChildAt(i);
            if (position == i){
                imageView.setImageResource(R.mipmap.ic_page_indicator_focused);
            }else{
                imageView.setImageResource(R.mipmap.ic_page_indicator);
            }
        }
    }

}

View Code
虽然简单,但是也记录一下,说不定哪天就能帮上忙呢,有的时候遇到很多问题解决过但是想不起来,可是当你看到相关联的一些代码,或许记忆片段就来了
  Android开发 最新文章
Android动态权限申请
使用Kotlin,抛弃findViewById
.net程序员做的第一个安卓APP
Android学习笔记
计算机毕业设计源码分享
计算机毕业设计源码分享
ELF Format 笔记(一)—— 概述
Fragment学习笔记
Android复制Assets目录下的文件到指定目录
Android网络请求框架AsyncHttpClient实例详
上一篇文章      下一篇文章      查看所有文章
加:2017-11-17 23:30:37  更:2017-11-17 23:30:42 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年9日历
2019-9-20 1:32:42
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识