Pinned Repositories
android-forms
Android 动态表单,支持常用表单(文本框、选择框、下拉框、弹出框、日期选择框)、表单验证、表单渲染。
Android-MvvmComponent-App
Android 组件化开源app -开眼短视频(OpenEyes)
banner
:construction: 轮播图框架,banner 今天带给大家一个比较实用的轮播图框架,banner 1.导入依赖 'com.youth.banner:banner:1.4.9' 1 2.添加权限 <uses-permission android:name="android.permission.INTERNET" />//联网 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />//读取外置存储卡 1 2 3.添加布局 <com.youth.banner.Banner xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="150dp" /> 1 2 3 4 5 4.在Activity 中编写代码,相关代码含义已经全部添加注释 public class MyBanner extends AppCompatActivity implements OnBannerListener { private Banner banner; private ArrayList<String> list_path; private ArrayList<String> list_title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_banner); initView(); } private void initView() { banner = (Banner) findViewById(R.id.banner); //放图片地址的集合 list_path = new ArrayList<>(); //放标题的集合 list_title = new ArrayList<>(); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg"); list_title.add("好好学习"); list_title.add("天天向上"); list_title.add("热爱劳动"); list_title.add("不搞对象"); //设置内置样式,共有六种可以点入方法内逐一体验使用。 banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE); //设置图片加载器,图片加载器在下方 banner.setImageLoader(new MyLoader()); //设置图片网址或地址的集合 banner.setImages(list_path); //设置轮播的动画效果,内含多种特效,可点入方法内查找后内逐一体验 banner.setBannerAnimation(Transformer.Default); //设置轮播图的标题集合 banner.setBannerTitles(list_title); //设置轮播间隔时间 banner.setDelayTime(3000); //设置是否为自动轮播,默认是“是”。 banner.isAutoPlay(true); //设置指示器的位置,小点点,左中右。 banner.setIndicatorGravity(BannerConfig.CENTER) //以上内容都可写成链式布局,这是轮播图的监听。比较重要。方法在下面。 .setOnBannerListener(this) //必须最后调用的方法,启动轮播图。 .start(); } //轮播图的监听方法 @Override public void OnBannerClick(int position) { Log.i("tag", "你点了第"+position+"张轮播图"); } //自定义的图片加载器 private class MyLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load((String) path).into(imageView); } } }
DrawerLayout-NavigationView
:art: :hammer: NavigationView是什么 long long ago :arrow_down:,我们做抽屉菜单的时候,左边滑出来的那一部分的布局都是由我们自己来定义的,自己写的话,花点时间也能做出来好看的侧拉菜单,但总是要耗费时间,于是Google在5.0之后推出了NavitationView,就是我们左边滑出来的那个菜单。这个菜单整体上分为两部分,上面一部分叫做HeaderLayout,下面的那些点击项都是menu,这样的效果如果我们要自己写肯定也能写出来,但是没有必要,既然Google提供了这个控件,那我们就来看看这个控件要怎么用
FlowLayout
:wrench: :globe_with_meridians:自定义流式布局,:zap:标签一.自定义控件的流程 //1.第一步,测量 onMeasure(); //2.第二步,布局 onLayout(); //3.第三部,绘制 onDraw() 1 2 3 4 5 6 二.自定义控件的分类 继承View重写onDraw方法 用于实现一些不规则的效果,不方便通过组合的方式达到,需要通过静态或者动态的显示一些不规则的图形的,需要通过绘制的方式实现,这种方法需要手动的填写支持padding和wrap_content方法 1 继承ViewGroup派生特殊的Layout 这也是我们这此文章介绍的一种自定义布局,即除LinearLayout,RelativeLayout,FrameLayout这几种系统的布局以外的布局,需要稍微的处理元素和子元素的测量和绘制过程, 1 继承特定的View(比如TextView) 这种方法用来扩展已经有的View的功能,这种方法相对比较简单 1 继承特定的ViewGroup(比如LinearLayout) 这种方法比较普遍,当某种效果比较像很多种View组合在一起的时候,可以采用这种方法来实现,采用这种方法不需要自己处理ViewGroup的测量和布局这两个过程. 上次的文章中介绍了一个PullRefresh(下拉刷新,与加载更多按钮) 1 2 3 下拉刷新,加载很多的地址PullRefresh
flutter_mvvm
ListViewDemo
ListView 分页加载 通过滑动监听来实现加载数据 demo简单,需要时直接copy
Mvp-
:pencil2: :fire: MVC就不说了,接触过开发应该都知道----- 看了很多关于mvp的博客,一看一大堆,官方话更多 MVP(Model-View-Presenter)模式解释 Model: 数据层. 负责与网络层和数据库层的逻辑交互. View: UI层. 显示数据, 并向Presenter报告用户行为. Presenter: 从Model拿数据, 应用到UI层, 管理UI的状态, 决定要显示什么, 响应用户的行为. MVP模式的最主要优势就是耦合降低, Presenter变为纯Java的代码逻辑, 不再与Android Framework中的类如Activity, Fragment等关联, 便于写单元测试. 代码地址: 编写思路: 1 编写View接口:首先View要干啥?比如(视图要显示进度条,显示内容) public interface MvpView { /** * 定义统一的规则 */ //显示加载框 void load(); //显示数据 void show(List<Person> persons); } 2编写Model接口:model主要加载数据 考虑怎么加载 public interface MvpModel { /** * 加载数据 * */ void loaddata(OnLoadLisner onLoadLisner); //设计内部类回调 interface OnLoadLisner{ void Complted(List<Person> persons); } } model实现类 public class ImvpModel implements MvpModel { @Override public void loaddata(OnLoadLisner onLoadLisner) { ArrayList<Person> persons = new ArrayList<>(); persons.add(new Person(R.drawable.ic_launcher,"hello")); 简单的添加数据 //将数据返回上层 onLoadLisner.Complted(persons); } } 3p层的处理 :首先要有view和model的引用 model可以New对象 但是view不能new 因为View一般是Activty public class Mvppre<T extends MvpView> { /** * 创建构造方法 * 拿大两个的引用 * */ MvpView view; MvpModel model=new ImvpModel(); public WeakReference<T> tWeakReference; //创建构造方法 public Mvppre(T view){ // tWeakReference = new WeakReference<>(view);//防止内存泄露 this.view=view; } //创建绑定方法 // public void Onattch(T view){ // tWeakReference = new WeakReference<>(view); // } //创建解绑数据 public void Ondeattch(){ tWeakReference.clear(); } //创建方法提取数据 public void fetch(){ if(view!=null){ view.load(); if(model!=null){ model.loaddata(new MvpModel.OnLoadLisner() { @Override public void Complted(List<Person> persons) { view.show( persons); } }); } } } } MainActivity的使用 public class MainActivity extends AppCompatActivity implements MvpView{ private ListView lv; private Mvppre jj; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); jj = new Mvppre(this); jj.fetch(); } @Override public void load() { Toast.makeText(MainActivity.this, "正在加载", Toast.LENGTH_SHORT).show(); } @Override public void show(List<Person> persons) { lv.setAdapter(new Myadpater(persons,this)); } }
PersonCenter
:bookmark: :sparkles::construction_worker:博客地址:https://blog.csdn.net/xueshao110/article/details/88879771#comments
TicketUnion
xuell0601's Repositories
xuell0601/banner
:construction: 轮播图框架,banner 今天带给大家一个比较实用的轮播图框架,banner 1.导入依赖 'com.youth.banner:banner:1.4.9' 1 2.添加权限 <uses-permission android:name="android.permission.INTERNET" />//联网 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />//读取外置存储卡 1 2 3.添加布局 <com.youth.banner.Banner xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="150dp" /> 1 2 3 4 5 4.在Activity 中编写代码,相关代码含义已经全部添加注释 public class MyBanner extends AppCompatActivity implements OnBannerListener { private Banner banner; private ArrayList<String> list_path; private ArrayList<String> list_title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_banner); initView(); } private void initView() { banner = (Banner) findViewById(R.id.banner); //放图片地址的集合 list_path = new ArrayList<>(); //放标题的集合 list_title = new ArrayList<>(); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg"); list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg"); list_title.add("好好学习"); list_title.add("天天向上"); list_title.add("热爱劳动"); list_title.add("不搞对象"); //设置内置样式,共有六种可以点入方法内逐一体验使用。 banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE); //设置图片加载器,图片加载器在下方 banner.setImageLoader(new MyLoader()); //设置图片网址或地址的集合 banner.setImages(list_path); //设置轮播的动画效果,内含多种特效,可点入方法内查找后内逐一体验 banner.setBannerAnimation(Transformer.Default); //设置轮播图的标题集合 banner.setBannerTitles(list_title); //设置轮播间隔时间 banner.setDelayTime(3000); //设置是否为自动轮播,默认是“是”。 banner.isAutoPlay(true); //设置指示器的位置,小点点,左中右。 banner.setIndicatorGravity(BannerConfig.CENTER) //以上内容都可写成链式布局,这是轮播图的监听。比较重要。方法在下面。 .setOnBannerListener(this) //必须最后调用的方法,启动轮播图。 .start(); } //轮播图的监听方法 @Override public void OnBannerClick(int position) { Log.i("tag", "你点了第"+position+"张轮播图"); } //自定义的图片加载器 private class MyLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load((String) path).into(imageView); } } }
xuell0601/Mvp-
:pencil2: :fire: MVC就不说了,接触过开发应该都知道----- 看了很多关于mvp的博客,一看一大堆,官方话更多 MVP(Model-View-Presenter)模式解释 Model: 数据层. 负责与网络层和数据库层的逻辑交互. View: UI层. 显示数据, 并向Presenter报告用户行为. Presenter: 从Model拿数据, 应用到UI层, 管理UI的状态, 决定要显示什么, 响应用户的行为. MVP模式的最主要优势就是耦合降低, Presenter变为纯Java的代码逻辑, 不再与Android Framework中的类如Activity, Fragment等关联, 便于写单元测试. 代码地址: 编写思路: 1 编写View接口:首先View要干啥?比如(视图要显示进度条,显示内容) public interface MvpView { /** * 定义统一的规则 */ //显示加载框 void load(); //显示数据 void show(List<Person> persons); } 2编写Model接口:model主要加载数据 考虑怎么加载 public interface MvpModel { /** * 加载数据 * */ void loaddata(OnLoadLisner onLoadLisner); //设计内部类回调 interface OnLoadLisner{ void Complted(List<Person> persons); } } model实现类 public class ImvpModel implements MvpModel { @Override public void loaddata(OnLoadLisner onLoadLisner) { ArrayList<Person> persons = new ArrayList<>(); persons.add(new Person(R.drawable.ic_launcher,"hello")); 简单的添加数据 //将数据返回上层 onLoadLisner.Complted(persons); } } 3p层的处理 :首先要有view和model的引用 model可以New对象 但是view不能new 因为View一般是Activty public class Mvppre<T extends MvpView> { /** * 创建构造方法 * 拿大两个的引用 * */ MvpView view; MvpModel model=new ImvpModel(); public WeakReference<T> tWeakReference; //创建构造方法 public Mvppre(T view){ // tWeakReference = new WeakReference<>(view);//防止内存泄露 this.view=view; } //创建绑定方法 // public void Onattch(T view){ // tWeakReference = new WeakReference<>(view); // } //创建解绑数据 public void Ondeattch(){ tWeakReference.clear(); } //创建方法提取数据 public void fetch(){ if(view!=null){ view.load(); if(model!=null){ model.loaddata(new MvpModel.OnLoadLisner() { @Override public void Complted(List<Person> persons) { view.show( persons); } }); } } } } MainActivity的使用 public class MainActivity extends AppCompatActivity implements MvpView{ private ListView lv; private Mvppre jj; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); jj = new Mvppre(this); jj.fetch(); } @Override public void load() { Toast.makeText(MainActivity.this, "正在加载", Toast.LENGTH_SHORT).show(); } @Override public void show(List<Person> persons) { lv.setAdapter(new Myadpater(persons,this)); } }
xuell0601/DrawerLayout-NavigationView
:art: :hammer: NavigationView是什么 long long ago :arrow_down:,我们做抽屉菜单的时候,左边滑出来的那一部分的布局都是由我们自己来定义的,自己写的话,花点时间也能做出来好看的侧拉菜单,但总是要耗费时间,于是Google在5.0之后推出了NavitationView,就是我们左边滑出来的那个菜单。这个菜单整体上分为两部分,上面一部分叫做HeaderLayout,下面的那些点击项都是menu,这样的效果如果我们要自己写肯定也能写出来,但是没有必要,既然Google提供了这个控件,那我们就来看看这个控件要怎么用
xuell0601/FlowLayout
:wrench: :globe_with_meridians:自定义流式布局,:zap:标签一.自定义控件的流程 //1.第一步,测量 onMeasure(); //2.第二步,布局 onLayout(); //3.第三部,绘制 onDraw() 1 2 3 4 5 6 二.自定义控件的分类 继承View重写onDraw方法 用于实现一些不规则的效果,不方便通过组合的方式达到,需要通过静态或者动态的显示一些不规则的图形的,需要通过绘制的方式实现,这种方法需要手动的填写支持padding和wrap_content方法 1 继承ViewGroup派生特殊的Layout 这也是我们这此文章介绍的一种自定义布局,即除LinearLayout,RelativeLayout,FrameLayout这几种系统的布局以外的布局,需要稍微的处理元素和子元素的测量和绘制过程, 1 继承特定的View(比如TextView) 这种方法用来扩展已经有的View的功能,这种方法相对比较简单 1 继承特定的ViewGroup(比如LinearLayout) 这种方法比较普遍,当某种效果比较像很多种View组合在一起的时候,可以采用这种方法来实现,采用这种方法不需要自己处理ViewGroup的测量和布局这两个过程. 上次的文章中介绍了一个PullRefresh(下拉刷新,与加载更多按钮) 1 2 3 下拉刷新,加载很多的地址PullRefresh
xuell0601/ORMLite-
:rocket: 1、下载 ORMLite Jar 首先去ORMLite官网下载jar包 官网 2创建Bean对象 @DatabaseTable(tableName = "user_info")//创建表名 public class User { public User() { } @DatabaseField(generatedId = true)//绑定字段 private int id; @DatabaseField(columnName = "name") private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Basesql类继承OrmLiteSqliteOpenHelper public class Basesql extends OrmLiteSqliteOpenHelper { private final static String DATABASE="myad.db"; private final static int VERSION=1; public HashMap<String ,Dao> maps=new HashMap<>(); public Basesql(Context context) { super(context, DATABASE, null, VERSION); } private static Basesql instance; public static synchronized Basesql getInstance(Context context){ if(instance==null){ synchronized (Basesql.class){ if(instance==null){ instance=new Basesql(context); } } } return instance; }; @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource,User.class); } catch (SQLException e) { e.printStackTrace(); } } // public synchronized Dao getdao(Class cla) throws SQLException { Dao dao=null; String simpleName = cla.getSimpleName(); if(maps.containsKey(simpleName)){ dao=maps.get(simpleName); }else{ dao=super.getDao(cla); maps.put(simpleName,dao); } return dao; } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { } } UserDao数据库操作类 public class UserDao { private final Basesql instance; private Dao getdao = null; public UserDao(Context context) { this.instance = Basesql.getInstance(context); try { this.getdao = instance.getdao(User.class); } catch (SQLException e) { e.printStackTrace(); } } //添加操作 public void add(User user){ try { getdao.create(user); } catch (SQLException e) { e.printStackTrace(); } } //删除 public void detele() throws SQLException { getdao.deleteById(2); } //查询 public List<User> Query(){ List list=null; try { list = getdao.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return list; }; public void updates(User user){ try { getdao.update(user); } catch (SQLException e) { e.printStackTrace(); } } /** * 构建BUilder 删除条件比较复杂 */ // public void shanchu(User user){
xuell0601/Android-
自定义索引,使用场景 ,如电话联系人等等展示,使用注意里边有jar包,使用之前一定要导入
xuell0601/ListViewDemo
ListView 分页加载 通过滑动监听来实现加载数据 demo简单,需要时直接copy
xuell0601/News-
:globe_with_meridians: :twisted_rightwards_arrows: 基于Android 的新闻App
xuell0601/alpha
Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。
xuell0601/android-Camera
xuell0601/Android-gif-jar
功能很强大的Gif库,能设置加载方式,可以先加载后显示或者只显示第一帧,播放速度比实际播放速度快,如果要显示的gif太大,会出现BOOM的问题。 使用方法: 1)将GifView的jar包导入到项目中 2)在XML配置,用法与imageview一致 3)代码中配置
xuell0601/android-open-project
A categorized collection of Android Open Source Projects, More powerful web version:
xuell0601/android_design_patterns_analysis
Android源码设计模式分析项目
xuell0601/BitmapCache-DiskCache
BitmapCache+DiskCache 图片三级缓存的
xuell0601/demo
基于谷歌的mvp 之前也写过mvp架构,但是总是感觉不够规范,把谷歌的mvp架构看了一下,基于谷歌然后自己改造了一下,只是个人的理解
xuell0601/DropDownMenu
Android仿美团流行下拉菜单实现
xuell0601/FlutterApp
Flutter写的小demo
xuell0601/gitme
Flutter开发的一款Github客户端。 A Github client APP developed with Flutter, and It both supports Android and iOS.
xuell0601/glide-transformations
An Android transformation library providing a variety of image transformations for Glide.
xuell0601/HiPermission
A simple and beautiful runtime permission library on Android.
xuell0601/KotlinStudy
从Java角度深入理解Kotlin
xuell0601/learn-coordinatorlayout-behavior
CoordinatorLayout 自定义Behavior 高仿美团商家详情界面 实现页面内容复杂联动效果
xuell0601/NumberButton
购物车商品数量、增加和减少控制按钮
xuell0601/Progress
自定义进度条
xuell0601/RichEditor
Android富文本编辑器,一款支持撤销、加粗、斜体、下划线、有序无序列表、对齐、改文字大小、改文字颜色、插入图片、插入视频等功能,并且可设置cookie,自定义素材操作菜单的的编辑器
xuell0601/SocketDemo
https://blog.csdn.net/yuzhiqiang_1993/article/details/78094909
xuell0601/TimeAxle_View
自定义View实践:时间轴
xuell0601/Toutiao
一款第三方今日头条客户端, MVP + RxJava + Retrofit
xuell0601/ViewPagerIndicator
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock.
xuell0601/Zxing-Android