关于手势监听,具体过程为:
(1)实现一个OnGestureListener的接口并覆写其中的方法;
(2)实例化一个GestureDetector对象,并将(1)中的接口传入;
(3)将要监听手势动作的View绑定到onTouchListener(),并返回GestureDetector的.onTouchEvent方法;
过程如下:
mView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return gestureDetector.onTouchEvent(event); } });
应用中我将一个layout绑定手势监听滑动,但发现实际并不响应,输出发现gestureDetector.onTouchEvent(event)返回的是false,也就是说gestureDetector没有捕捉到响应的手势。
解决办法:
在layout的设置中添加属性android:longClickable="true"。
原因分析:
该属性的默认值应该是false,即只能响应简单的手势状态,对于复杂的手势动作不能判断,因此造成以上的问题。
android中可以通过对activity主题进行设置,可以得到一些特殊的效果,如背景透明、无标题、全屏等,android本身提供了一些主题供开发者选择,具体方法即在manifest文件中相应的<activity>标签下添加android:theme="@android:style/..."即可。,如果要自定义主题,需要在res/values目录下添加style.xml文件,在其中定义所需的属性。
遇到的问题:
应用中需要将一个activity的背景设置为半透明效果,但系统本身提供的选择只有全透明效果,因此需要自定义。
定义activity背景色 <item name="windowBackground">#99cccccc</item>,这样写会报出两种错误,
(1) No resource found that matches the given name: attr 'windowBackground',即指定的name找不到,这条有时候会通过,但背景不会改变,是漆黑的一片。
(2) Color types not allowed (at 'android:windowBackground' with value '#99cccccc'),即对color不能这么写
解决办法:
<item name="android:windowBackground">@color/transparent_background</item>
即name里要添加android:,color要专门在colors.xml文件中具体定义
分析:
<item name="windowBackground">这种写法是在仿照系统api中的style写的,在目录\android-sdk\platforms\android-8\data\res\values下的themes.xml文件是系统定义的各种主题属性,例如
<!-- Window attributes --> <item name="windowBackground">@android:drawable/screen_background_dark</item> <item name="windowFrame">@null</item> <item name="windowNoTitle">false</item> <item name="windowFullscreen">false</item> <item name="windowIsFloating">false</item> <item name="windowContentOverlay">@android:drawable/title_bar_shadow</item> <item name="windowShowWallpaper">false</item> <item name="windowTitleStyle">@android:style/WindowTitle</item> <item name="windowTitleSize">25dip</item> <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item> <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
不知道为什么系统文件就没有问题。。。总之自定义的话对这些属性值的name需添加android:,形如<item name="android:windowBackground">
在JNI的调用中当写好java代码后需要用javah生成相应的.h头文件。
遇到的问题:在网上找了很多方法,但都会报找不到类文件的错误,形如
错误:无法访问 com.xf.Jni.NativeJni
未找到 com.xf.Jni.NativeJni 的类文件
javadoc: 错误 - 找不到类 com.xf.Jni.NativeJni。
Error: 未在命令行中指定任何类。请尝试使用 -help。
现将使用方法整理如下(windows环境):
首先,javah的用法:javah [选项] <类>
其中 [选项] 包括:
-help 输出此帮助消息并退出
-classpath <路径> 用于装入类的路径 -bootclasspath <路径> 用于装入引导类的路径 -d <目录> 输出目录 -o <文件> 输出文件(只能使用 -d 或 -o 中的一个) -jni 生成 JNI样式的头文件(默认) -version 输出版本信息 -verbose 启用详细输出 -force 始终写入输出文件
使用全限定名称指定 <类>(例如,java.lang.Object)。
其中-classpath、-d是必须的,-classpath指定文件路径;-d指定输出路径,也就是头文件的输出路径(可以使任意的);-jni指定转换文件的类名,需包含完整包名。
(1)使用javah命令需生成***.class文件,用eclipse开发android应用时会自动在工程文件夹的bin目录下生成,所以不需要自己再动手生成;
(2)-classpath需指定为.class文件所在包的前一级目录
我的例子 C:\Users\xf>javah -classpath D:\ProgAndroid\android_workspace\JNITest\bin\classes
-d D:\ProgAndroid\android_workspace\JNITest -jni com.xf.jnitest.JniNative
用serverSocket的时候总是报这样的错:
java.net.SocketException: select failed at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(Unknown Source) at java.net.ServerSocket.implAccept(Unknown Source) at java.net.ServerSocket.accept(Unknown Source)
原因:软件端口冲突;
解决办法:重置winsock, 在cmd中输入netsh winsock reset