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/android-forms
Android 动态表单,支持常用表单(文本框、选择框、下拉框、弹出框、日期选择框)、表单验证、表单渲染。
xuell0601/TicketUnion
xuell0601/flutter_mvvm
xuell0601/AppUpdate
Android App update library. Android版本更新库,简单、可随意定制
xuell0601/architecture-components-samples
Samples for Android Architecture Components.
xuell0601/BaseRecyclerViewAdapterHelper
BRVAH:Powerful and flexible RecyclerAdapter
xuell0601/CoordinatorLayoutExample
CoordinatorLayout 打造炫酷效果的例子
xuell0601/Course-App
xuell0601/douyin
使用Flutter撸一个抖音国外版,看看有多炫
xuell0601/FD-Marketplace
Create mobile marketplace design using Flutter
xuell0601/flutter-checkio
How time flies.一款开源习惯打卡APP,流畅的动画体验,Bloc实现状态管理,主题(颜色)切换,字体切换,数据库管理等。
xuell0601/flutter_app
Flutter教学:从零开始->进阶之旅->深入探讨
xuell0601/flutter_deer
🦌 Flutter 练习项目(包括集成测试、可访问性测试)。内含完整UI设计图,更贴近真实项目的练习。Flutter practice project. Includes a complete UI design and exercises that are closer to real projects.
xuell0601/flutter_tiktok
Flutter tiktok short video app.
xuell0601/FlycoTabLayout
An Android TabLayout Lib
xuell0601/food_delivery_app
xuell0601/House-App
xuell0601/im_flutter_sdk
环信im flutter sdk, example中包含ui代码.
xuell0601/Jetpack-MVVM-Best-Practice
是 难得一见 的 Jetpack MVVM 最佳实践!在 以简驭繁 的代码中,对 视图控制器 乃至 标准化开发模式 形成正确、深入的理解!
xuell0601/Kotlin-Coroutines-Android-Examples
Learn Kotlin Coroutines for Android by Examples. Learn how to use Kotlin Coroutines for Android App Development.
xuell0601/LiveEventBus
:mailbox_with_mail:EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
xuell0601/Movie-App-Flutter-UI
xuell0601/NewPipeExtractor_Dart
NewPipeExtractor plugin for Flutter
xuell0601/QMUI_Android
提高 Android UI 开发效率的 UI 库
xuell0601/Skeleton
A library provides an easy way to show skeleton loading view like Facebook and Alipay
xuell0601/SpringbootApi
xuell0601/tailscale-android
Tailscale Android Client
xuell0601/TencentIMFlutterDemo
腾讯云即时通信IMdemo
xuell0601/video_cms
xuell0601/xuell0601