01_下个页面的切换和viewpager的事件处理
透明
切换到下一个页面
viewpager主体页面
viewpager的监听器
但是这样会失效,把监听器设置给indicator会更好,把vp换成tpi即可
indicator将viewpager的事件设置为空,所以无效
02_新闻数据的缓存
03_新闻页签对应内容的布局
第五阶段的开发
相对布局 覆盖
轮播图、新闻的布局
04_获取每个页签对应的数据
05_轮播图的显示
轮播图的适配器
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView iv_lunbo_pic = new ImageView(mainActivity);
@Override
publicvoid destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View) object);
}
@Override
publicint getCount() {
// TODO Auto-generated method stub
returnlunboDatas.size();
}
@Override
publicboolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == object;
}
xutils提供的异步解析图片的组件
在网速比较慢的情况下,设置默认的图片
06_Viewpager的事件拦截
自定义一个类继承viewpager,实现此方法
07_轮播图的touch事件处理,是否让父控件拦截
08_轮播图的描述信息和点的选中效果处理
轮播图边框模式
09_handler的简单介绍
10_handler的消息机制
handler只能在主线程中实例化,在子线程中会挂掉
但创建looper对象就可以
#####轮播图
1.事件拦截
不让父组件拦截我的事件
事件传递子组件可以在dispatchTouchEvent方法中,设置父类不要拦截我的事件
2. 描述信息和点的处理
3. 动态显示描述和点的选中效果
4. 实现轮播图的效果
handler对象
5. 实现点击轮播图中图片事件
点击轮播中图片,停止轮播,松开继续播放
######Handler事件处理
1.Handler
2.Message
3.Looper
4.MessageQueue
1.Message
new Message()
Message.obtain() 比new Message()效率高些
handler.ob...
本身就是单链表 对消息完复用(回收消息:清空消息的属性)
2. Handler
构造函数
public Handler() {
.....
//获取轮询器
mLooper = Looper.myLooper();
if (mLooper == null) {
throw new RuntimeException(
"Can't create handler inside thread that has not called Looper.prepare()");
}
//获取消息队列
mQueue = mLooper.mQueue;
mCallback = null;
}
覆盖handleMessage()方法
3. handler发消息
handler.sendMessage();
最终由sendMessageAtTime来发消息
queue.enqueueMessage(msg, uptimeMillis);
4.MessageQueue 来接受消息
enqueueMessage
存放消息 并且按消息的时间排序(单链表)
5.Looper取消息
loop方法取消息
while (true) {
Message msg = queue.next(); // might block
。。。。。
msg.target.dispatchMessage(msg);
。。。
msg.recycle();
}
}
6.dispatchMessage分发消息
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
//Runnable 或runOnUiThread
//该方法看7
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
//调用覆盖的这个方法,处理结果,主线程中执行
}
}
7. handleCallback(msg);
private final void handleCallback(Message message) {
message.callback.run();
}
11_轮播图的显示和事件加载
privateclass LunBoAdapter extends PagerAdapter{
@Override
public Object instantiateItem(ViewGroup container, int position) {
//给图片添加触摸事件
iv_lunbo_pic.setOnTouchListener(new OnTouchListener() {
privatefloat downX;
privatefloat downY;
privatelong downTime;
@Override
publicboolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://按下停止轮播
System.out.println("按下");
downX = event.getX();
downY = event.getY();
downTime = System.currentTimeMillis();
lunboTask.stopLunbo();
break;
case MotionEvent.ACTION_CANCEL://事件取消
lunboTask.startLunbo();
break;
case MotionEvent.ACTION_UP://松开
float upX = event.getX();
float upY = event.getY();
if (upX == downX && upY == downY) {
long upTime = System.currentTimeMillis();
if (upTime - downTime < 500) {
//点击
lunboPicClick("被单击了。。。。。");
}
}
System.out.println("松开");
lunboTask.startLunbo();//开始轮播
break;
default:
break;
}
returntrue;
}
privatevoid lunboPicClick(Object data) {
//处理图片的点击事件
System.out.println(data);
}
});
12_新闻列表数据的显示
13_把轮播图加到listView中
将tpi中的轮播图单独抽取出来,最后加载到listview的顶部