走马灯的控件 MarqueeView(继承ViewFlipper),解锁后,走马灯失效的解决方法

开发过程中,有使用到MarqueeView(继承ViewFlipper)实现上下滚动的效果,在未设置滑动解锁的情况下,再次进入界面时,跑马灯动画效果失效,不在滚动。如果设置了滑动解锁的情况下,进入手机界面,跑马灯可继续运行。

对于上述问题,我查阅了资料和上网查询,最终找到了解决的方法, 在自定义控件MarqueeView中设置一个公共方法:setUserPresent(boolean userPresent)和getUserPresent()。
正常解锁的情况下,只需设置setUserPresent(boolean userPresent)方法,对于快速解锁的情况下,需要同时设置这两个方法。
代码如下:

// 正常解锁      通过映射的方法更改属性  使其可被访问       
public void setUserPresent(boolean userPresent) {
        Class clazz = ViewFlipper.class;
        try {
            Field f = clazz.getDeclaredField("mUserPresent");
            f.setAccessible(true); //设置些属性是可以访问的
            f.setBoolean(this, userPresent);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

//快速解锁     还需设置getUserPresent()

 public boolean getUserPresent() {
        Class clazz = ViewFlipper.class;
        try {
            Field f = clazz.getDeclaredField("mUserPresent");
            f.setAccessible(true); //设置些属性是可以访问的
            return f.getBoolean(this);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return false;
    }

以上的两个公共方法都是写在自定义的控件中的,如何在我们的页面Activity中去使用它们呐?

因这个问题是出现在解锁的情况下,所以我们可在生命周期中的onStart()方法中去设置………

代码如下:


private MarqueeView  marqueeViewOne;  //自定义控件  跑马灯  
 @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        marqueeViewOne.removeAllViews();
        marqueeViewOne.setUserPresent(true);  
        marqueeViewOne.startWithList(dataForNormalMoveList);
        marqueeViewOne.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (!marqueeViewOne.getUserPresent()) {
                    marqueeViewOne.removeAllViews();
                    marqueeViewOne.setUserPresent(true);   //将属性设置为true  可被访问 
                    marqueeViewOne.startWithList(dataForNormalMoveList);  //  从新开始运行跑马灯
                }
            }
        }, 1000);
    }

上述方法中使用了延时方法postDelayed,是一因为手机的不同,解锁时出现时间差,针对于小米手机,设置了延时1S

以上方法已在项目中使用过,可以解决问题,如若有错,请指出。谢谢!

效果图如下所示:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值