智慧北京 用到的开源框架:
Sliding menu
Xutils
shareSdk
WebView
ViewPagerIndicator
一些细节又简单的地方
1.设置viewpager的下面图片的框架名字代码:
#
private TextView mtv_taile; //没有什么好讲的
mtv_taile = (TextView) view.findViewById(R.id.tv_taile);
TopnewsBean topNews = mTopnews.get(position);
//获取数据库中的数据
mtv_taile.setText(topNews.getTitle());
2.viewpager图片滑动时的小圆点
1.用了三方框架PageIndicator
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/indicator"
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>
private CirclePageIndicator mindicator ;
mindicator= (CirclePageIndicator) view.findViewById(R.id.indicator);
mindicator.setViewPager(mViewPager);
mindicator.setSnap(true);//快照方式展示
一些常用的框架
RxJava
RxAndroid
RxBinding
RxLifecycle
okhttp
retrofit
ijkplayer
DanmakuFlameMaster
butterknife
glide
MaterialSearchView
FlycoTabLayout
MagicaSakura
FlowLayout
头部下拉刷新
1.创建类PullToRefreshListView继承Listview
2.创建方法 initHeaderView()初始化头布局
public void initHeaderView() {
mHeaderView = View.inflate(getContext(), R.layout.pull_to_refresh, null);
this.addHeaderView(mHeaderView);
//隐藏头布局
mHeaderView.measure(0, 0);
mHeaderViewHeight = mHeaderView.getMeasuredHeight();
mHeaderView.setPadding(0, -mHeaderViewHeight, 0, 0);
}
初始化布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<ImageView
android:id="@+id/iv_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/common_listview_headview_red_arrow" />
<ProgressBar
android:id="@+id/pb_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="invisible" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下拉刷新"
android:textColor="#f00"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="2015-10-21 09:00"
android:textColor="#a000"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
3.隐藏之后我们要通过手移动来打开下拉刷新
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
startY = (int) ev.getY();
break;
case MotionEvent.ACTION_MOVE:
if (startY==-1){
startY = (int) ev.getY();
}
endy = (int) ev.getY();
int dy = endy - startY;
int position = getFirstVisiblePosition();
if (dy>0&&position==0){
int i = dy -mHeaderViewHeight;
mHeaderView.setPadding(0,i,0,0);
return true;
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.onTouchEvent(ev);
}
4.下拉刷新的箭头上下动画
/*
*
* 初始化旋转动画*/
public void initAnimaton() {
//向上的状态
animUp = new RotateAnimation(0, -180, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
animUp.setDuration(500);
animUp.setFillAfter(true);//保存当前的状态
//向下的状态
animDown = new RotateAnimation(-180, 0, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
animDown.setDuration(500);
animDown.setFillAfter(true);//保存当前的状态
}
5.设置刷新的时间
//设置刷新时间
@RequiresApi(api = Build.VERSION_CODES.N)
private void setCrrentTime() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = format.format(new Date());
pull_tv_time.setText(time);
}
接口的回调(重点)
//接口的回调
/*
* 3.定义成员变量,接收监听对象
* */
private OnRefreshListener mlistener;
/*
* 2.暴露接口,更新测试
* */
public void setOnRefreshListener(OnRefreshListener listener) {
mlistener = listener;
}
/*
* 回调的接口
* 1.下拉刷新的回调接口
* */
public interface OnRefreshListener {
public void onRefresh();
}
4.进行回调
if (mlistener != null) {
mlistener.onRefresh();
}
5.前端界面设置回调
lvlist.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() {
@Override
public void onRefresh() {
getDataFromServer();//再次刷新数据
}