开源框架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", "保存成功");}
0 0