ethereal.src.rpm软件在linux(Red Hat/Fedora)下的安装和使用
2010-08-13 14:09
633 查看
日志表现出:startFling()方法先后在onFling()和onTouch()调用。按照逻辑来说,在onFling()中调用了,即使在onTouch()方法中调用也不会再执行。
在onTouch()方法中的相关代码片段如下
(1)onFling()中执行startFling()方法,在onTouch()中再执行被视为无效操作。
11-01 16:09:55.147: D/WatchTvFragment(1026): ++programTouchListener.onTouch++ 11-01 16:09:55.147: D/WatchTvFragment(1026): ++onFling++ 11-01 16:09:55.147: D/WatchTvFragment(1026): velocityX:139.54526, velocityY:225.4602 11-01 16:09:55.147: D/WatchTvFragment(1026): onFling() set bFlinging to true 11-01 16:09:55.147: D/WatchTvFragment(1026): onFling() invode startFling() 11-01 16:09:55.147: D/WatchTvFragment(1026): ++startFling++ 11-01 16:09:55.147: D/WatchTvFragment(1026): event.getAction():1 11-01 16:09:55.147: D/WatchTvFragment(1026): onTouch() set bFlinging to true 11-01 16:09:55.147: D/WatchTvFragment(1026): onTouch() invode startFling() 11-01 16:09:55.147: D/WatchTvFragment(1026): ++startFling++ 11-01 16:09:55.197: D/WatchTvFragment(1026): run() set bFlinging to false 11-01 16:09:55.247: D/WatchTvFragment(1026): run() set bFlinging to false经过处理,startFling()方法不会既执行onFling()方法的调用又去执行onTouch()方法的调用。
在onTouch()方法中的相关代码片段如下
case MotionEvent.ACTION_UP: Logger.i(TAG, "event.getAction():" + MotionEvent.ACTION_UP); programWidth = programListFragment.getView().getMeasuredWidth(); float velocityX = (programParams.leftMargin < programWidth / 2) ? -1000 : 1000; Logger.i(TAG, "onTouch() invode startFling()"); startFling(velocityX); break;在onFling()方法中的相关代码片段如下
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Logger.i(TAG, "++onFling++"); Logger.i(TAG, "velocityX:" + velocityX + ", velocityY:" + velocityY); Logger.i(TAG, "onFling() invode startFling()"); startFling(velocityX); return true; // 需要返回true }方法startFling()的代码片段如下
boolean bFlinging = false; void stopFling() { bFlinging = false; } synchronized void startFling(final float velocityX) { Logger.i(TAG, "++startFling++"); if (bFlinging) { Logger.i(TAG, "invalid operation."); return; } Logger.i(TAG, "flinging..."); bFlinging = true; programWidth = programListFragment.getView().getMeasuredWidth(); new Thread() { public void run() { int interval = 50; float xDistFling; int newLeftMargin; float decay = 0.98f; float v; // 速度从(+/-)1000px/s开始。 if (velocityX > 0 && velocityX < 1000) v = 1000; else if (velocityX < 0 && velocityX > -1000) v = -1000; else v = velocityX; // running表示while循环什么时候结束 boolean running = true; while (running) { v *= decay; xDistFling = v / 1000 * interval; newLeftMargin = programParams.leftMargin + (int) xDistFling; if (newLeftMargin <= 0) { newLeftMargin = 0; running = false; } else if (newLeftMargin >= channelWidth) { newLeftMargin = channelWidth; running = false; } programParams.leftMargin = newLeftMargin; try { Thread.sleep(interval); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(0); } Logger.i(TAG, "flinging finished."); } }.start(); }打印出来的日志表现是符合逻辑的,日志如下。
(1)onFling()中执行startFling()方法,在onTouch()中再执行被视为无效操作。
11-01 16:30:29.427: D/WatchTvFragment(2654): ++programTouchListener.onTouch++ 11-01 16:30:29.427: D/WatchTvFragment(2654): ++onFling++ 11-01 16:30:29.427: D/WatchTvFragment(2654): velocityX:-348.25256, velocityY:215.86748 11-01 16:30:29.427: D/WatchTvFragment(2654): onFling() invode startFling() 11-01 16:30:29.427: D/WatchTvFragment(2654): ++startFling++ 11-01 16:30:29.427: D/WatchTvFragment(2654): flinging... 11-01 16:30:29.427: D/WatchTvFragment(2654): event.getAction():1 11-01 16:30:29.427: D/WatchTvFragment(2654): onTouch() invode startFling() 11-01 16:30:29.427: D/WatchTvFragment(2654): ++startFling++ 11-01 16:30:29.427: D/WatchTvFragment(2654): invalid operation. 11-01 16:30:29.987: D/WatchTvFragment(2654): flinging finished.(2)onFling()中没有执行startFling()方法,在onTouch()中可以执行。
11-01 17:30:52.257: D/WatchTvFragment(8850): ++programTouchListener.onTouch++ 11-01 17:30:52.257: D/WatchTvFragment(8850): event.getAction():1 11-01 17:30:52.257: D/WatchTvFragment(8850): onTouch() invode startFling() 11-01 17:30:52.257: D/WatchTvFragment(8850): ++startFling++ 11-01 17:30:52.257: D/WatchTvFragment(8850): flinging... 11-01 17:30:52.307: D/WatchTvFragment(8850): flinging finished.
相关文章推荐
- 安装和使用Red Hat/Fedora下ethereal.src.rpm软件
- Linux 使用RPM安装卸载升级软件简介
- [Linux]使用rpm命令安装软件包
- linux 使用rpm安装软件时,遇到"warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY "错误
- Linux下xxx.src.rpm软件包的安装(顺便暴力解决cron报System Error问题)
- linux下安装软件的办法(.rpm .src .tar.gz .bin)(转)
- linux之基础篇-学会使用rpm与yum进行软件安装
- Linux中rpm、src.rpm、源码包软件的安装
- linux 使用rpm安装软件时,遇到"warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY "错误
- Linux操纵系统安装.src.rpm软件包的要领
- linux下软件安装apt-get yum dpkg rpm 的使用
- linux下安装软件的办法(.rpm .src .tar.gz .bin)
- Linux中rpm、src.rpm、源码包软件的安装
- 安装Linux软件使用的命令:最好使用yum命令--而不是rpm.
- linux 使用rpm安装软件时,遇到"warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOK
- linux光盘使用、rpm软件包、yum软件仓库安装使用
- Linux不同发行版安装软件,例如Fedora安装rpm、Ubuntu安装deb(完)
- Linux学习(2)——在Fedora上安装rpm软件
- Linux使用RPM安装软件
- linux软件包的安装之----编译源码格式的rpm包(后缀名为.src.rpm的软件包)