任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

GestureDetector手势识别类 – 进阶篇 Android开发技术

  上次我们提供了一个基本的框架可以实现Android平台上的手势操作,借助GestureDetector类可以轻松实现,详细查看 GestureDetector手势识别类 – 入门篇 本次结合网友总结的内容一起来探讨下具体的应用。    首先上次Android123写的较为简单,如果网友不太明白可以看看更具体些的内容:   boolean  onDoubleTap(MotionEvent e)解释:双击的第二下Touch down时触发boolean  onDoubleTapEvent(MotionEvent e)解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。boolean  onDown(MotionEvent e)解释:Touch down时触发boolean  onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)解释:Touch了滑动一点距离后,up时触发。void  onLongPress(MotionEvent e)解释:Touch了不移动一直Touch down时触发boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)解释:Touch了滑动时触发。void  onShowPress(MotionEvent e)解释:Touch了还没有滑动时触发(与onDown,onLongPress比较onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。 boolean  onSingleTapConfirmed(MotionEvent e)boolean  onSingleTapUp(MotionEvent e)解释:上面这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。 点击一下非常快的(不滑动)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed 点击一下稍微慢点的(不滑动)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed 有了这么多的响应方式,我们能更加方便的对用户的触摸操作进行响应,对各种动作都有所对应。那么这个类如何使用呢,其实非常简单,在view的新建一个GestureDetector的对象。构造函数里gestureDetector = new GestureDetector(new SelfGestureDetectorListener()); 然后在View的onTouchEvent里以下这样用,就可以在gestureDetector的事件里写自己的代码了。@Overridepublic boolean […]

Android JNI开发进阶篇 Android开发技术

       今天Android123主要讲解下昨天需要详细说明有关Java JNI相关的异常处理、线程安全问题,在JNI中产生的异常主要是内存不足OutOfMemoryError、数组越界ArrayIndexOutOfBoundsException、数组赋值类型错误ArrayStoreException以及指针越界等问题。简单的我们昨天在 Android JNI开发提高篇中已经讲到。    除了Throw或ThrowNew来抛出异常外,还提供了5个函数来处理,分别为jthrowable ExceptionOccurred(JNIEnv *env);、void ExceptionDescribe(JNIEnv *env);、void ExceptionClear(JNIEnv *env);  、 jboolean (JNIEnv *env) 和void FatalError(JNIEnv *env, const char *msg);    1. ExceptionCheck 用于检测如果一个异常已经抛出,则该方法将会返回JNI_TRUE就是typedef定义为1的布尔值。    2. ExceptionOccurred 获取正在抛出一个异常的本地引用,Native或Java层必须处理该异常,并返回一个jthrowable对象。    3. ExceptionDescribe主要用于打印出异常的错误描述。    4. ExceptionClear清除刚刚抛出的异常。    5. FatalError 的作用比较特殊,产生一个致命性的错误,Android123提示这样会导致JVM将关闭,就是程序停止运行了,所以使用时要谨慎。   我们以C++的代码做个例子,简单的说明下他们的使用方法    env->FindClass("Android123CWJ"); //假设这个类本身不存在  if(env->ExceptionCheck())  {     env->ExceptionDescribe();     env->ExceptionClear();  }  这样JVM因为查找Android123CWJ类不存在,导致了一个NoClassDefFoundError的异常。   在JNI中处理资源同步问题,JNI提供了一组函数分别为jint MonitorEnter(JNIEnv […]

Android开发进阶之NIO非阻塞包(四) Android开发技术

   今天我们通过一个实例详细讲解下Android下NIO非阻塞服务器的开发,对于客户端而言Android123不推荐使用NIO,毕竟NIO相对于传统IO较为复杂,最重要的NIO是为了解决多线程并发问题而解决的技术,可能会因为管理和复杂性降低最终的结果,毕竟NIO是Java的,相关的类型比较难控制,对于客户端而言我们可以使用C++、Java、C#甚至Flash Action Script来编写。     下面我们以一个简单的Echo Server为例子来分析  import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.charset.CharsetEncoder;import java.util.Iterator; public class Server {  public static void main(String[] args) {  Selector selector = null;  ServerSocketChannel ssc = null;  try {      selector = Selector.open(); //实例化selector      ssc = ServerSocketChannel.open(); //实例化ServerSocketChannel 对象       ssc.socket().bind(new InetSocketAddress(1987)); //绑定端口为1987       ssc.configureBlocking(false); //设置为非阻塞模式      ssc.register(selector, SelectionKey.OP_ACCEPT); //注册关心的事件,对于Server来说主要是accpet了     while (true) {   […]

100% Secure Checkout

PayPal / MasterCard / Visa