您的位置:首页 > 其它

开源框架02(PullToRefresh;PinnedHeaderListView;PhotoView;CustomShapeImageView;ormlite)

2016-12-31 00:20 525 查看

开源框架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.PinnedSectionListView
xmlns: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", "保存成功");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐