开源框架02(PullToRefresh;PinnedHeaderListView;PhotoView;CustomShapeImageView;ormlite)
来源:互联网 发布:fluent软件 编辑:程序博客网 时间:2024/05/21 14:41
开源框架02
PullToRefresh:强大的下拉刷新库,作者是ChrisBane(可选)
网址:https://github.com/chrisbanes/Android-PullToRefresh
PinnedHeaderListView:优秀的条目分割顶部固定效果
网址:https://github.com/beworker/pinned-section-listview
PhotoView:强大的图片跟随手势进行缩放移动的类库,作者是ChrisBane
网址:https://github.com/chrisbanes/PhotoView
CustomShapeImageView:强大的自定义形状的ImageView
网址:https://github.com/MostafaGazar/CustomShapeImageView
MPAndroidChart:强大的图表用于数据统计展示的类库(可选)
网址:https://github.com/PhilJay/MPAndroidChart
ormlite数据库 需要依赖俩个jar包 用注解
网址: http://ormlite.com/
1.GirdView使用 表格布局
GirdView的一些属性:android:numColumns="auto_fit" --------列数设置为自动android:columnWidth="90dp",----------每列的宽度,也就是Item的宽度android:stretchMode="columnWidth"------缩放与列宽大小同步android:verticalSpacing="10dp"----------垂直边距android:horizontalSpacing="10dp"-------水平边距
2.PullToRefreshGridView使用
网址:https://github.com/chrisbanes/Android-PullToRefresh
PullToRefreshGridView refreshGridview = (PullToRefreshGridView) findViewById(R.id.gd); list = new ArrayList<>(); for (int i = 0; i < 50; i++) { list.add("牛肉+"+i); } //设置上拉加载和下拉刷新的模式 refreshGridview.setMode(PullToRefreshBase.Mode.BOTH); //设置刷新的监听 refreshGridview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) { loadMore(true); } @Override public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) { loadMore(false); } }); GridView gridView = refreshGridview.getRefreshableView();//获取到GridView gridView.setNumColumns(3);//设置为3列 adapter = new MyAdapter(); gridView.setAdapter(adapter);//加载和刷新private void loadMore(final boolean isRefresh) { new Thread(){ @Override public void run() { if (isRefresh){ list.add(0,"新的牛肉丸"); }else{ list.add("再来一碗牛肉哦"); } runOnUiThread(new Runnable() { @Override public void run() { adapter.notifyDataSetChanged(); refreshGridview.onRefreshComplete();//刷新完毕 } }); } }.start();}
3.垂直滚动ScrollView搭配ListView的使用;ScrollView只能包含一个孩子
//无论你如何调整layout_width,layout_height属性,ListView列表只显示一列//需要重新测量listview的高@BindView(R.id.lv)ListView lv;/** * 测量listview的高 */private void setListViewHeight() { int totalHeight = 0; if (adapter == null) { return; } for (int i = 0; i < adapter.getCount(); i++) { //获取每一个子View View view = adapter.getView(i, null, lv); //测量每一个子View的宽高 view.measure(0, 0); // 统计所有子View的总高度 totalHeight += view.getMeasuredHeight(); } ViewGroup.LayoutParams layoutParams = lv.getLayoutParams(); //获取总的高度,包括分割线之间的高度+控件的高度 layoutParams.height = totalHeight + lv.getDividerHeight() * (adapter.getCount() - 1); lv.setLayoutParams(layoutParams);}
水平滚动的HorizontalScrollView
4.带有下拉刷新和上拉加载的 垂直滚动ScrollView 方法setMode();
布局中调用<com.handmark.pulltorefresh.library.PullToRefreshScrollView android:id="@+id/sc" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ListView android:id="@+id/lv" android:layout_height="wrap_content"></ListView> </LinearLayout></com.handmark.pulltorefresh.library.PullToRefreshScrollView>
5.pinned-section-listview框架使用
网址:https://github.com/beworker/pinned-section-listview 下载下依赖
布局中写:<de.halfbit.pinnedsection.PinnedSectionListViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:divider="@null"android:footerDividersEnabled="false"android:headerDividersEnabled="false"/>
Adapter的写法 必须实现implements PinnedSectionListView.PinnedSectionListAdapter
public class MyAdapter extends BaseAdapter implements PinnedSectionListView.PinnedSectionListAdapter { private int student = 0; private int teacher = 1; @Override public int getItemViewType(int position) { Object o = list.get(position); if (o instanceof Teacher) { return teacher; } else { return student; } } @Override public int getViewTypeCount() { return 2; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { TextView textView = new TextView(viewGroup.getContext()); textView.setMaxLines(2); textView.setPadding(20, 20, 20, 20); textView.setGravity(Gravity.CENTER); textView.setTextSize(20); textView.setTextColor(Color.BLACK); //获取条目的类型 int viewType = getItemViewType(i); if (viewType == student) { Student ss = (Student) list.get(i); textView.setBackgroundColor(Color.RED); textView.setText(ss.name); } else { Teacher tt = (Teacher) list.get(i); textView.setBackgroundColor(Color.GREEN); textView.setText(tt.name); } return textView; } /** * 选择固定item的条目的类型,TRUE为固定 * @param viewType * @return */ @Override public boolean isItemViewTypePinned(int viewType) { return viewType == teacher; } }
item的点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(Paind_Section_ListView.this, "第"+i+"个", Toast.LENGTH_SHORT).show(); } });
6.CustomShapeImageView:强大的自定义形状的ImageView
网址:https://github.com/MostafaGazar/CustomShapeImageView
辅助作图工具生成Svg格式直接导入项目res->raw
依赖库:
在布局中写:<com.meg7.widget.SvgImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="300dp" android:layout_height="300dp" android:layout_marginTop="10dp" android:layout_marginLeft="16dp" android:scaleType="centerCrop" android:src="@mipmap/sample_4" app:svg_raw_resource="@raw/sun2" />
重连夜神 脚本
重连夜神:
call C:\Users\yin13\AppData\Roaming\Nox\bin\Nox.exe 127.0.0.1:62001
7.ormlite数据库 需要依赖俩个jar包 用注解
网址: http://ormlite.com/
进入网站 下载core ; jdbc ;android
1.写一个类继承OrmLiteSqliteOpenHelper
public class DBHelper extends OrmLiteSqliteOpenHelper { public DBHelper(Context context) { super(context, "db", null, 1); } private static DBHelper mInatance = null; /** * 静态去调用,保证只有一个对象,单例模式 * @param context * @return */ public static DBHelper with(Context context) { if (mInatance == null) { synchronized (DBHelper.class) { if (mInatance == null) { mInatance = new DBHelper(context); } } } return mInatance; } /** * 创建表格 * @param sqLiteDatabase * @param connectionSource */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { //创建表格 调用TableUtils直接创建 try { TableUtils.createTable(connectionSource,Databases.class); } catch (SQLException e) { e.printStackTrace(); } } /** * 更新表格 * @param sqLiteDatabase * @param connectionSource * @param i * @param i1 */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { //drop表 try { TableUtils.dropTable(connectionSource,Databases.class,true); } catch (SQLException e) { e.printStackTrace(); } }}
2.创建javabean
@DatabaseTable(tableName = "xb") //自定义表格的名称public class Databases { @DatabaseField //定义为表的一个字段 public String name; @DatabaseField public int age; @DatabaseField(generatedId = true)//定义这个列是自增长的id public int id; //需要一个空参的构造 public Databases() { } public Databases(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Databases{" + "name='" + name + '\'' + ", age=" + age + ", id=" + id + '}'; }}
3.获取操作数据库的访问对象 ,?号代表按那种类型去查询
Dao<Databases, Integer> dao = dbHelper.getDao(Databases.class);
4.进行增删改查
/** * 删除数据 * * @param dao * @throws SQLException */private void delete(Dao<Databases, Integer> dao) throws SQLException { dao.deleteById(4); Log.e("delete", "删除数据");}/** * 更新数据 * * @param dao */private void upData(Dao<Databases, Integer> dao) throws SQLException { Databases databases = dao.queryForId(3); databases.name = "小强"; databases.age = 26; //更新数据 dao.update(databases); Log.e("upData", "更新数据");}/** * 查询数据 * * @param dao */private void query(Dao<Databases, Integer> dao) throws SQLException { List<Databases> queryForAll = dao.queryForAll(); Log.e("query", "查询到了" + queryForAll.size() + "数据"); for (int i = 0; i < queryForAll.size(); i++) { Log.e("query", "数据" + queryForAll.get(i).toString()); }}/** * 插入数据 * * @param dao * @throws SQLException */private void create(Dao<Databases, Integer> dao) throws SQLException { Databases db1 = new Databases("小明", 25); dao.create(db1); Log.e("create", "保存成功");}
- 开源框架02(PullToRefresh;PinnedHeaderListView;PhotoView;CustomShapeImageView;ormlite)
- 开源框架PullToRefresh、PinnedHeaderListView、PhotoView、CustomShapeImageView
- Ormlite开源数据库框架
- AndroidStudio使用开源框架PhotoView
- pulltoRefresh的开源框架使用
- android开源框架之PullToRefresh概述
- Android 手势图片,强大的开源框架PhotoView
- PinnedHeaderListView开源组件源码分析
- 开源框架-ormlite-android数据库的使用
- 数据库开源ormlite
- PinnedHeaderListView
- 16、android开源框架之android-pullToRefresh详解
- PhotoView开源项目剖析
- PhotoView开源项目剖析
- PhotoView开源项目剖析
- PhotoView开源项目剖析
- 开源组件photoView学习
- PhotoView 图片缩放框架
- OrmLite的使用
- Binder运行机制的流程图
- AIDL中callback的实现
- AIDL关键字
- 单点登录的原理和Java实现单点登录
- 开源框架02(PullToRefresh;PinnedHeaderListView;PhotoView;CustomShapeImageView;ormlite)
- Java即时编译(JIT编译):运行时把Class文件字节码编译成本地机器码
- 在Android studio中使用讯飞语音识别
- Redis(三)集群
- 如何使用yum工具来管理软件包
- 圆锥曲线光学性质
- 应用可用性衡量标准
- Atitit 软件架构方法的进化与演进cs bs soa roa msa attilax总结
- 学习使用python中唯一“非转基因”的http库----requests,第一篇