慕哥1154185
这个没有要本地跑的
WeiWei_v1
怡人梦
最好是自定义view
奇迹3
问题已解决,这个权限比较特殊,仅仅配置运行时权限是不够的,需要将用户引导到手机设置中,打开某个特殊的设置才可以。
全是甘货
class DoubleTapRunnable implements Runnable{
@Override
public void run() {
currentProgress++;
if(currentProgress <= progress) {
invalidate();
handler.postDelayed(doubleTapRunnable,50);
} else {
handler.removeCallbacks(doubleTapRunnable);
currentProgress = 0;
}
}
}假如在双击的执行动画中单击,currentProgress在单击事件中被赋值为50,而此时双击线程DoubleTapRunnable还未结束会进入到if(currentProgress <= progress)重绘一次,50ms后进入下一次双击线程,此时进入else块,双击线程的回调被remove,而currentProgress也被赋值为0。单击线程中又会调用invalidate();进行重绘,导致单击动画只有刚刚进入的一瞬间进度为50,而余下的绝大部分时间进度都为0
至于为什么双击动画结束后再单击不会出现这样的BUG
双击结束后会执行双击线程中else块中的这两个语句
handler.removeCallbacks(doubleTapRunnable);
currentProgress = 0;
此时双击线程的回调已被移除(remove),然后单击为currentProgress赋值为50,动画是正常的
总的来说就是双击和单击这两个线程的执行时间和顺序的问题。
会跳舞的绅士
canvas.drawCircle(mWidth / 2, mHeight / 2, mWidth / 2, circlePaint);
修改第一个和第二个参数即可
qq_昨天的遗忘_04423295
确认自己已继承某个View/ViewGroup,确定你的onDraw方法在添加@Override注解后,Android Studio/Eclipse不会报警告,错误提示。所以猜测如下:
你没有继承特定的View,没有继承是没有这个方法回调的
你的onDraw(Canvas c)不是系统提供的,而是你自己定义的一个重载方法,如果是重载添加@Override注解是会报警告的
你的onDraw方法已经执行了,只是你没有看到预期的效果,认为它没有运行
慕粉4369755
Faith_Insist
mlayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
原来忘了这句
小熊_Android
慕粉3914249
显示控件用windowmanager做,控件的交互在控件内做交互事件添加,处理就好,还有notifycationmanager,但是不能随便移动
慕__女神
是显示交集的啊 只不过它只显示了上层而已 http://blog.csdn.net/q445697127/article/details/7867529 这篇博客 你先去看看吧
慕粉3914370
直接用构造函数,你操作的就不是一个对象了,你先new了个管理者a,下次你要new哥管理者b,你改b能修改a的属性么
僧伽吒
小球要在服务里启动 不要在Activity里启动
也不要杀掉进程
王之名
有进行观看的就可以到我的课程里了。。右上角头像点进去后,左边第二个课程里就有了。
慕先生0560154
Android主线程本来就是基于事件驱动的,当你在一个界面没有双击,也没有单击,没有任何操作,界面没有变化,handler没有任何消息要抛出来,主线程就在一个while循环里阻塞着。主线程本来就是用来界面刷新,所以又叫UI如果你界面刷新都舍不得用它,那主线程还执行什么。如果你指的是,runnable里面,那几行简单的代码,那和UI测量重绘这些根本不是一个量级。更不需要考虑。
qq_游尘浮梦_0
算基线的时候 , 如果不明白你可以全打印出来 ,查看具体数值,参照示意图
Xiaorenwull
慕勒1976910
12参数为第一个点xy,34参数为第二个点xy,以此类推,path即为路径,其不会返回。每次都以自己为原点做偏移。
慕勒1976910
白草
应该是在setDragState()这个方法里面没有调用invalidate()吧