day57_实战项目智慧北京第03天

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的顶部

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值