为了账号安全,请及时绑定邮箱和手机立即绑定

Android攻城狮的第二门课(第3季)

难度初级
时长 6小时 0分
学习人数
综合评分9.57
162人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • 如图,给GestureOverlayView添加了样式。
    查看全部
  • 如果觉得显示的手势的轨迹不好看,可以自定义轨迹的样式。 一些常见的XML属性设置: Android:eventInterceptionEnabled 定义当手势已经被识别出来时,是否拦截该手势动作 Android:fadeDuration 当用户画完的时候,手势效果淡出的时间 Android:fadeEnabled 用户画完之后,手势是否自动淡出 Android:gestureColor 手势的颜色 Android:gestureStrokeType 笔画的类型 Android:gestureStrokeWidth 笔画的粗细
    查看全部
  • 给gestureOverlayView设置监听器: gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener(){}) 重写方法onGesturePerformed()。 如图,onGesturePerformed()的示例代码,也就是关于手势识别的代码实现。 ArrayList<Prediction>:预测集 predction.score:相似度,值越大,则越相似,也就是说你必须做出几乎一模一样的手势才能通过识别。相似度的取值范围一般是0.0~10.0,取10.0就已经太夸张了,因为很难做出非常接近的手势。所以,这里的下限只取5.0: predction.score>=5.0
    查看全部
  • 在 MainActivity 中的代码实现
    查看全部
  • 使用GestureOverlayView进行手势识别的步骤: 1. 使用Gesture Builder生成手势文件 2. 将文件加入到项目 3. 在项目中创建 GestureOverlayView,将它放置在想要识别手势的控件上,或者把它包裹起来。 只能识别文件中存在的手势,如果不是文件中存在的手势,就无法识别。 --------------- 在res文件夹下创建文件夹raw,把手势文件gesture添加到这里。 GestureOverlayView 一种用于手势输入的透明覆盖层,可覆盖在其他控件的上方,也可以包含其他控件。存在3个监听接口: GestureOverlayView.OnGestureListener // 手势监听器 GestureOverlayView.OnGesturePerformedListener // 手势执行监听器 GestureOverlayView.OnGesturingListener // 手势执行中监听器 ------------------ 如图使用GestureOverlayView控件去包含ImageView控件。 可识别手势的区域大小不是由ImageView决定,而是由GestureOverlayView决定。 ------------------------ 补充: 使用Android Studio则更加简单,不用去创建 Simple Project。老师之所以要创建Simple Project,是因为模拟器中没有Gesture Builder这种应用,所以要自己创建。而Android Studio的模拟器是有Gesture Builder的,所以我们可以直接进入模拟器,点击Gesture Builder图标,进行手势的创建。
    查看全部
  • getSystemService 是 Android 很重要的一个 API , 它是 Activity 的一个方法,根据传入的 NAME 来获取对应的 Object,然后转换成相应的服务对象( XxxManager )。 迄今所学,无不如此: 获取系统的网络连接服务: ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(CONNECTIVITY_SERVICE); 获取系统的 WiFi 服务: WifiManager wifimanager = (WifiManager) this.getSystemService(WIFI_SERVICE); 获取系统的 Auido(音响/声音)服务: AudioManager mAudioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE); 获取系统的 Activity 服务: ActivityManager mActivityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 别忘了添加权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS"/>
    查看全部
  • 自定义的ContentProvider很难,需要自己去写一整套的ContentProvider,而且实际意义也不大,一般是企业实现多个程序的数据共享的时候才会用到。 也就是说,自定义的 ContentProvider 是为了解决多个程序的数据共享的问题。
    查看全部
  • 插入电话信息 其中的 Data.CONTENT_URI 要导入的包是:android.provider.ContactsContract.Data; 而系统自动匹配的可能是其他包,这时就会出错,所以要检查一下是不是导错包了。 需要添加的权限: <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> -------------------- 代码: values.put(StructuredName.RAW_CONTACT_ID,raw_contact_id); values.put(StructuredName.DISPLAY_NAME,"张三"); values.put(StructuredName.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);//声明MiME类型是一条记录,而不是很多条 uri = cr.insert(Data.CONTENT_URI ,values); values.clear(); // 插入电话信息,需要指定电话号码以及类型,尤其是类型,比较容易忘记去添加 values.put(Phone.RAW_CONTACT_ID,raw_contact_id); // 先确定主键,然后才能正确地添加信息 values.put(Phone.NUMBER,"1333333333"); values.put(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE); cr.insert(Data.CONTENT_URI,values);
    查看全部
  • // 根据联系人的ID去查询联系人的邮箱地址(截图有误) Cursor c2 = cr.query(Email.CONTENT_URI,new String[]{Email.DATA,Email.TYPE},Email.CONTACT_ID+"="+id,null,null); if (c2!=null){ while (c2.moveToNext()){ int type = c2.getInt(c2.getColumnIndex(Email.TYPE)); if (type == Email.TYPE_WORK){ Log.i("info","工作邮箱:"+Email.DATA); } } c2.close(); } ------------ 最后,别忘了关闭游标c。
    查看全部
  • 号码的查询不再像前面那种直接查询,而是必须通过联系人的Id去查找对应的电话,如果不这么做,查出来的电话号码可能不是当前联系人的电话号码。 依然需要通过ContentResolver来查询(在上节课的游标循环之内),然后返回一个游标Cursor,再通过游标去查询号码。这样就形成了“游标套游标”。 需要导入的包:android.provider.ContactsContract.CommonDataKinds.Phone; 1. 查询的 Uri : Phone.CONTENT_URI。 2. 查询的内容:号码除了数字以外,还有分类型(例如移动号码、家庭号码),所以对应两个属性:Phone.NUMBER,Phone.TYPE。查询内容就是 new String[]{Phone.NUMBER,Phone.TYPE}。 3. 查询条件,是根据 Id 去查的,写做 Phone.CONTACT_ID+"="+id。注意等号一定要加引号。 4. 最后两个属性这里不需要,都写成 null 就可以了。 ------------- 通过游标查询电话之后,记得关闭游标c1。注意这里的关闭是在 if (c1!=null)语句块之内,如果写到外面则会存在空指针异常。
    查看全部
  • ContentProvider: 1. 使用 ContentResolver 操作 ContentProvider 中的数据: 当外部应用需要对 ContentProvider 中的数据进行增删改查的时候,可以使用 ContentResolver 类来完成。 2. 使用 Activity 提供的 getContentResolver() 方法获取 ContentResolver 对象。 3. ContentResolver 类提供了与 ContentProvider 类相同签名的四个方法: -- public Uri insert(Uri uri,ContentValues values).该方法用于往ContentProvider里面添加数据。 -- public int delete(Uri uri,String selection,String[] selectionArgs).该方法从ContentProvider中删除数据。 -- public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs).该方法用于更新ContentProvider里面的数据。 -- public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder).该方法用于从ContentProvider中获取数据。
    查看全部
  • 本章要实现的功能 1. 使用系统提供的 ContentProvider - 查询联系人 - 增加联系人 2. 使用自定义的ContentProvider - 自定义 ------------------ 必须添加的权限:<uses-permission android:name="android.permission.READ_CONTACTS"/> ----------------- 查询方法——query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)的解析: 联系人的Uri地址:ContactsContrac。Contacts.CONTENT_URI。 查询的内容(projection),可以直接自定义一个数组表示:new String[]{Contacts._ID,Contacts.DISPLAY_NAME},其中 Contacts._ID,Contacts.DISPLAY_NAME 都是系统写死了的常量,都可以直接调用,分别表示主键和人名。 查询的条件(selection):不需要的话就写 null,另外selectionArgs也写成null。 排序(sortOrder)采用默认排序,所以也写成 null。
    查看全部
  • UriMatcher类 如果match()匹配失败,则返回 -1,也就是 UriMatcher.NO_MATCH。
    查看全部
  • String name=spf.getString("name", ""); if (name==null||name.equals("")) { Toast.makeText(this, name, 1).show(); check.setChecked(false); } else { check.setChecked(true); edit_username.setText(name); } 判断是否为空的时候应该这样判断吧,要不然按照老师的写法, 改变checkbox的状态的语句不执行
    查看全部
  • “GestureDetector”实现“手势识别” 1.实现onTouch(MotionEvent) 方法。 用来监听屏幕操作事件。 2.定义类继承SimpleOnGestureListener,也可以实现两个接口OnGestureListener,OnDoubleTapListener 3.实例化GestureDetector类 gestureDetector=new GestureDetector(MainActivity.this, new MyGestureListener()); 4.在onTouchEvent事件中,给gestureDetector增加event public boolean onTouchEvent(MotionEvent event) { //当屏幕出现点击事件的时候会调用该方法 gestureDetector.onTouchEvent(event); return super.onTouchEvent(event); } 5.在自定义的GestureListener接口中重写方法。实现事件监听。 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //当滑动屏幕时,会调用该方法 if(e2.getX()-e1.getX()>50) { Toast.makeText(MainActivity.this, "向右滑动", Toast.LENGTH_SHORT).show();; } else if(e1.getX()-e2.getX()>50) { Toast.makeText(MainActivity.this, "向左滑动", Toast.LENGTH_SHORT).show(); } return super.onFling(e1, e2, velocityX, velocityY); } 原理: 原本是有onTouchEvent事件监听(现在也是)。但是不使用其处理,而是将其交给GestureListener来处理该事件。
    查看全部

举报

0/150
提交
取消
课程须知
本课程是Android开发课程的中后期部分,学习之前要求对一些知识点有一定的了解: 1、已经掌握了Java基础 2、已经熟悉或者了解Android中的监听事件原理 3、已经熟悉或者了解一种以上的数据库,并掌握基本的SQL语句
老师告诉你能学到什么?
1、初步掌握Android手势识别的原理以及实际使用 2、初步掌握Android的数据存储方式 3、深度了解Android中的组件 4、熟悉了解Android常用的系统服务并对服务的使用有新的认识

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!