优秀的第三方常用控件
来源:互联网 发布:java中多态的表现形式 编辑:程序博客网 时间:2024/05/20 15:41
try
字母索引(城市和通讯录)
IndexableRecyclerView
城市索引
通讯录索引
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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:orientation="vertical"> <!-- <TextView android:text="@string/content_movie" android:layout_width="match_parent" android:layout_height="match_parent"/>--> <me.yokeyword.indexablerv.IndexableLayout android:id="@+id/indexableLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:indexBar_background="#08000000" app:indexBar_layout_width="50dp" app:indexBar_textColor="@android:color/black" app:indexBar_textSpace="8dp"/></LinearLayout>
public class FragmentMovie extends BaseFragment { private List<CityEntity> mDatas; private SimpleHeaderAdapter<CityEntity> mHotCityAdapter; @Override protected int getLayoutId() { return R.layout.fragment_movie; } @Override protected void initView(View view) { IndexableLayout indexableLayout = (IndexableLayout) view.findViewById(R.id.indexableLayout); indexableLayout.setLayoutManager(new GridLayoutManager(this.getContext(), 1)); // setAdapter CityAdapter adapter = new CityAdapter(this.getContext()); indexableLayout.setAdapter(adapter); // set Datas mDatas = initDatas(); // 快速排序。 排序规则设置为:只按首字母 (默认全拼音排序) 效率很高,是默认的10倍左右。 按需开启~ indexableLayout.setCompareMode(IndexableLayout.MODE_FAST); adapter.setDatas(mDatas, new IndexableAdapter.IndexCallback<CityEntity>() { @Override public void onFinished(List<EntityWrapper<CityEntity>> datas) { // 数据处理完成后回调// mSearchFragment.bindDatas(mDatas);// mProgressBar.setVisibility(View.GONE); } }); // set Center OverlayView// indexableLayout.setOverlayStyle_Center();adapter.setOnItemContentClickListener(new IndexableAdapter.OnItemContentClickListener<CityEntity>() { @Override public void onItemClick(View v, int originalPosition, int currentPosition, CityEntity entity) { }}); // set Listener adapter.setOnItemContentClickListener(new IndexableAdapter.OnItemContentClickListener<CityEntity>() { @Override public void onItemClick(View v, int originalPosition, int currentPosition, CityEntity entity) { if (originalPosition >= 0) { ToastUtil.showShort(getContext(), "选中:" + entity.getName() + " 当前位置:" + currentPosition + " 原始所在数组位置:" + originalPosition); } else { ToastUtil.showShort(getContext(), "选中Header:" + entity.getName() + " 当前位置:" + currentPosition); } } }); adapter.setOnItemTitleClickListener(new IndexableAdapter.OnItemTitleClickListener() { @Override public void onItemClick(View v, int currentPosition, String indexTitle) { ToastUtil.showShort(getContext(), "选中:" + indexTitle + " 当前位置:" + currentPosition); } }); // 添加 HeaderView DefaultHeaderAdapter接收一个IndexableAdapter, 使其布局以及点击事件和IndexableAdapter一致 // 如果想自定义布局,点击事件, 可传入 new IndexableHeaderAdapter mHotCityAdapter = new SimpleHeaderAdapter<>(adapter, "热门", "热门城市", iniyHotCityDatas()); // 热门城市 indexableLayout.addHeaderAdapter(mHotCityAdapter); // 定位 final List<CityEntity> gpsCity = iniyGPSCityDatas(); final SimpleHeaderAdapter gpsHeaderAdapter = new SimpleHeaderAdapter<>(adapter, "定位", "当前城市", gpsCity); indexableLayout.addHeaderAdapter(gpsHeaderAdapter); // 显示真实索引// indexableLayout.showAllLetter(false); // 模拟定位 indexableLayout.postDelayed(new Runnable() { @Override public void run() { gpsCity.get(0).setName("杭州市"); gpsHeaderAdapter.notifyDataSetChanged(); } }, 3000); // 搜索Demo// initSearch(); } private List<CityEntity> iniyGPSCityDatas() { List<CityEntity> list = new ArrayList<>(); list.add(new CityEntity("定位中...")); return list; } private List<CityEntity> initDatas() { List<CityEntity> list = new ArrayList<>(); List<String> cityStrings = Arrays.asList(getResources().getStringArray(R.array.city_array)); for (String item : cityStrings) { CityEntity cityEntity = new CityEntity(); cityEntity.setName(item); list.add(cityEntity); } return list; } private List<CityEntity> iniyHotCityDatas() { List<CityEntity> list = new ArrayList<>(); list.add(new CityEntity("杭州市")); list.add(new CityEntity("北京市")); list.add(new CityEntity("上海市")); list.add(new CityEntity("广州市")); return list; }}
CityAdapter
package com.mine.moviedemo.entity;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.mine.moviedemo.R;import me.yokeyword.indexablerv.IndexableAdapter;/** * Created by YoKey on 16/10/7. */public class CityAdapter extends IndexableAdapter<CityEntity> { private LayoutInflater mInflater; public CityAdapter(Context context) { mInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateTitleViewHolder(ViewGroup parent) { View view = mInflater.inflate(R.layout.item_index_city, parent, false); return new IndexVH(view); } @Override public RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent) { View view = mInflater.inflate(R.layout.item_city, parent, false); return new ContentVH(view); } @Override public void onBindTitleViewHolder(RecyclerView.ViewHolder holder, String indexTitle) { IndexVH vh = (IndexVH) holder; vh.tv.setText(indexTitle); } @Override public void onBindContentViewHolder(RecyclerView.ViewHolder holder, CityEntity entity) { ContentVH vh = (ContentVH) holder; vh.tv.setText(entity.getName()); } private class IndexVH extends RecyclerView.ViewHolder { TextView tv; public IndexVH(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv_index); } } private class ContentVH extends RecyclerView.ViewHolder { TextView tv; public ContentVH(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv_name); } }}
CityEntity
package com.mine.moviedemo.entity;import me.yokeyword.indexablerv.IndexableEntity;/** * Created by a on 2017/4/14. */public class CityEntity implements IndexableEntity { private long id; private String name; private String pinyin; public CityEntity() { } public CityEntity(String name) { this.name = name; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPinyin() { return pinyin; } public void setPinyin(String pinyin) { this.pinyin = pinyin; } @Override public String getFieldIndexBy() { return name; } @Override public void setFieldIndexBy(String indexByField) { this.name = indexByField; } @Override public void setFieldPinyinIndexBy(String pinyin) { this.pinyin = pinyin; }}
EasyRecyclerView
将开发中常用的RecyclerView的各种需求封装进库。
并且adapter支持数据管理,Header与Footer添加,加载更多。没有更多。加载错误
轮播图
android图片轮播效果,RollViewPager的简单使用
RollViewPager的github
另一个轮播图Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!
导入第三方的moudle时,最好先把三方的demo先导入一次,导入demo时,修改所有的(项目的gradle和moudle的gradle都要改)
‘compileSdkVersion 25
buildToolsVersion “25.0.3”’
然后修改项目的gradle目录下的两个文件,用本地文件去替换他们
这样就可以运行这个demo了
运行无误后,把这个改装后的moudle导入自己的项目即可,记得
’ compile project(‘:banner’)’,
这是还可能有错误,就需要对照原demo中的gradle文件,去添加一些代码
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/refresh" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> ★ <com.jude.rollviewpager.RollPagerView android:id="@+id/rollPager" android:layout_width="match_parent" android:layout_height="180dp" app:rollviewpager_play_delay="3000"/> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/content"/> </LinearLayout> </android.support.v4.widget.NestedScrollView></android.support.v4.widget.SwipeRefreshLayout>
package com.mine.moviedemo.fragment;import android.graphics.Color;import android.support.v4.widget.SwipeRefreshLayout;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.Toast;import com.jude.rollviewpager.RollPagerView;import com.jude.rollviewpager.adapter.StaticPagerAdapter;import com.jude.rollviewpager.hintview.ColorPointHintView;import com.mine.moviedemo.R;import com.mine.moviedemo.base.BaseFragment;/** * Created by a on 2017/4/13. */public class FragmentHome extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { private SwipeRefreshLayout mRefresh; private View view; private RollPagerView mRollViewPager; @Override protected void initView(View view) { this.view = view; mRefresh = (SwipeRefreshLayout) view.findViewById(R.id.refresh); mRefresh.setOnRefreshListener(this); mRollViewPager = (RollPagerView) view.findViewById(R.id.rollPager); //设置播放时间间隔 mRollViewPager.setPlayDelay(1000); //设置透明度 mRollViewPager.setAnimationDurtion(500); //设置适配器 mRollViewPager.setAdapter(new TestNormalAdapter()); //设置指示器(顺序依次) //自定义指示器图片 //设置圆点指示器颜色 //设置文字指示器 //隐藏指示器 //mRollViewPager.setHintView(new IconHintView(this, R.drawable.point_focus, R.drawable.point_normal)); mRollViewPager.setHintView(new ColorPointHintView(getContext(), Color.YELLOW, Color.WHITE)); //mRollViewPager.setHintView(new TextHintView(this)); //mRollViewPager.setHintView(null); } private class TestNormalAdapter extends StaticPagerAdapter { private int[] imgs = { R.mipmap.img1, R.mipmap.img2, R.mipmap.img3, }; @Override public View getView(ViewGroup container, int position) { ImageView view = new ImageView(container.getContext()); view.setImageResource(imgs[position]); view.setScaleType(ImageView.ScaleType.CENTER_CROP); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return view; } @Override public int getCount() { return imgs.length; } } @Override protected int getLayoutId() { return R.layout.fragment_home; } @Override public void onRefresh() { Toast.makeText(getContext(), "开始刷新", Toast.LENGTH_SHORT).show(); view.postDelayed(new Runnable() { @Override public void run() { Toast.makeText(getContext(), "开始完毕", Toast.LENGTH_SHORT).show(); mRefresh.setRefreshing(false); } }, 1500); }}
0 0
- 优秀的第三方常用控件
- asp.net常用的第三方控件
- 我常用的delphi 第三方控件
- 常用的delphi第三方控件
- 我常用的delphi 第三方控件
- 一些常用的第三方控件
- iOS开发中常用的优秀第三方框架
- 优秀的第三方库
- 常用,易用,好看的第三方控件(.NET)
- 常用,易用,好看的第三方控件(.NET)
- 常用,易用,好看的第三方控件(.NET)
- 常用,易用,好看的第三方控件(.NET)
- 一些iOS常用的第三方库和控件
- 一些iOS常用的第三方库和控件
- 一些iOS常用的第三方库和控件
- delphi 常用第三方控件的安裝方法
- 一些iOS常用的第三方库和控件
- 一些iOS常用的第三方库和控件
- LinqToXML中的XmlDocument去除头部声明写法
- Python:eval的妙用和滥用
- opencv使用cmake链接库函数出现usr/bin/ld: cannot find -lopencv_终极解决方案
- fetch
- 一次同余式的求解(扩展欧几里得)
- 优秀的第三方常用控件
- Java中的动态代理技术
- maven assembly plugin使用
- Struts2拦截器的使用 (详解)
- 可点进来看看的一些Python基础
- JDk1.6中文版 math类
- springMVC+MyBatis+meaven整合的pom.xml配置文件
- Apache+Tomcat部署负载均衡(或集群)
- 最终一致性算法Gossip简介