整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          全能手勢-讓你徹底告別導航欄

          全能手勢-讓你徹底告別導航欄

          能手勢是一款手機手勢控制軟件。軟件可以設置隱藏手機的虛擬按鍵,來拓展你手機可顯示的范圍,通過滑動手機邊緣等手勢動作來代替手機虛擬按鍵,達到返回、返回主界面、任務欄等效果。只需要指尖在屏幕上輕劃就可以執行想要的動作,不讓虛擬按鍵霸占屏幕位置,更一步達到全面屏的效果。軟件不僅支持虛擬按鍵的手勢動作,還可以設置實體物理按鍵動作效果,你還可以將其按鍵設置為其他應用,例如相機,這樣就無需去應用欄中尋找就可以一鍵快速打開相機了。

          下載地址:https://www.downkuai.com/android/112225.html

          軟件特點

          隨心所欲的手勢開啟您的應用;
          漂亮的UI界面,小鮮肉的感覺;
          輸入手勢就能打開您的軟件;
          常用的軟件總是會優先被找到;
          讓您越用越舒心,越用越好用;
          讓您總是可以這樣玩,這樣玩,還可以這樣玩;

          軟件功能

          一、支持的手勢
          1、從邊緣向內滑。
          2、雙擊狀態欄。
          3、長按實體鍵 (需要安卓 4.3+)。
          4、也支持手寫筆 (S Pen) 和鼠標。
          二、支持的動作
          1、首頁、返回、最近應用、關閉屏幕、沉浸模式等。
          2、啟動某個應用或捷徑。

          大家帶來點的是第三章的最后一節——Gestures(手勢), 用過魅族手機的朋友相信對手勢肯定是不陌生的,在home鍵兩側像屏幕內滑動, 可以打開后臺任務列表等等~在應用中通過手勢來操作會大大提升用戶體驗, 比如Scroll手勢在瀏覽器中個滾屏,Fling在瀏覽器中的換頁等!

          當然,有利也有弊,比如不當的手勢操作引起APP Carsh,經常這樣可是會引起用戶不滿的! 所以是否要為你的應用增加手勢,可要考慮清楚哦!另外手勢要和前面學的單指/多指觸碰相區分哦!

          手勢是:連續觸碰的行為,比如左右上下滑動屏幕,又或者畫一些不規則的幾何圖形! Android對上述兩種手勢行為都提供了支持:

          • Android提供手勢檢測,并為手勢識別提供了相應的監聽器!
          • Android運行開發者自行添加手勢,并且提供了相應的API識別用戶手勢!

          如果你的手機是Android 4.x的原生Android系統的話,你可能可以在你的手機或者平板上看到谷歌 提供的一個Gesture Builder的APP,該應用允許用戶以類似于涂鴉的方式繪制一個手寫符號,使之 對應一個字符串名稱!當然,沒有這樣的手機也沒關系,我們有模擬器嘛,自己開個4.0的系統試試 就知道了,另外,我們可以到\mmt\sdcard\gestures獲取到保存手勢的文件! 好了,嘮嘮叨叨那么多,開始講正題吧!

          對了,貼下官方API文檔先:GestureDetector


          1.Android中手勢交互的執行順序

          • 1.手指觸碰屏幕時,觸發MotionEvent事件!
          • 2.該事件被OnTouchListener監聽,可在它的onTouch()方法中獲得該MotionEvent對象!
          • 3.通過GestureDetector轉發MotionEvent對象給OnGestureListener
          • 4.我們可以通過OnGestureListener獲得該對象,然后獲取相關信息,以及做相關處理!

          我們來看下上述的三個類都是干嘛的: MotionEvent: 這個類用于封裝手勢、觸摸筆、軌跡球等等的動作事件。 其內部封裝了兩個重要的屬性X和Y,這兩個屬性分別用于記錄橫軸和縱軸的坐標。 GestureDetector: 識別各種手勢。 OnGestureListener: 這是一個手勢交互的監聽接口,其中提供了多個抽象方法, 并根據GestureDetector的手勢識別結果調用相對應的方法。

          ——上述資料摘自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html

          2.GestureListener詳解:

          從1中我們知道了監聽手勢的關鍵是:GestureListener 他給我們提供了下述的回調方法:

          • 按下(onDown): 剛剛手指接觸到觸摸屏的那一剎那,就是觸的那一下。
          • 拋擲(onFling): 手指在觸摸屏上迅速移動,并松開的動作。
          • 長按(onLongPress): 手指按在持續一段時間,并且沒有松開。
          • 滾動(onScroll): 手指在觸摸屏上滑動。
          • 按住(onShowPress): 手指按在觸摸屏上,它的時間范圍在按下起效,在長按之前。
          • 抬起(onSingleTapUp):手指離開觸摸屏的那一剎那。

          知道了GestureListener的相關方法后,實現手勢檢測也很簡單,步驟如下:

          • Step 1: 創建GestureDetector對象,創建時需實現GestureListener傳入
          • Step 2: 將Activity或者特定組件上的TouchEvent的事件交給GestureDetector處理即可! 我們寫個簡單的代碼來驗證這個流程,即重寫對應的方法:

          代碼如下:

          public class MainActivity extends AppCompatActivity {

          private MyGestureListener mgListener;

          private GestureDetector mDetector;

          private final static String TAG="MyGesture";

          @Override

          protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_main);

          //實例化GestureListener與GestureDetector對象

          mgListener=new MyGestureListener();

          mDetector=new GestureDetector(this, mgListener);

          }

          @Override

          public boolean onTouchEvent(MotionEvent event) {

          return mDetector.onTouchEvent(event);

          }

          //自定義一個GestureListener,這個是View類下的,別寫錯哦!!!

          private class MyGestureListener implements GestureDetector.OnGestureListener {

          @Override

          public boolean onDown(MotionEvent motionEvent) {

          Log.d(TAG, "onDown:按下");

          return false;

          }

          @Override

          public void onShowPress(MotionEvent motionEvent) {

          Log.d(TAG, "onShowPress:手指按下一段時間,不過還沒到長按");

          }

          @Override

          public boolean onSingleTapUp(MotionEvent motionEvent) {

          Log.d(TAG, "onSingleTapUp:手指離開屏幕的一瞬間");

          return false;

          }

          @Override

          public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {

          Log.d(TAG, "onScroll:在觸摸屏上滑動");

          return false;

          }

          @Override

          public void onLongPress(MotionEvent motionEvent) {

          Log.d(TAG, "onLongPress:長按并且沒有松開");

          }

          @Override

          public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {

          Log.d(TAG, "onFling:迅速滑動,并松開");

          return false;

          }

          }

          }

          對應操作截圖:

          • 1.按下后立即松開:


          • 2.長按后松開:


          • 3.輕輕一滑,同時松開:


          • 4.按住后不放持續做滑動操作:


          PS:從上述結果來看,我們發現了一個問題: 我們實現OnGestureListener需要實現所有的手勢,可能我針對的僅僅是滑動,但是你還是要去重載, 這顯得很逗逼,是吧,官方肯定會給出解決方法滴,官方另外給我們提供了一個SimpleOnGestureListener類 只需把上述的OnGestureListener替換成SimpleOnGestureListener即可!


          3.簡單的例子:下滑關閉Activity,上滑啟動新的Activity

          這里就用上述的SimpleOnGestureListener來實現吧:

          運行效果圖:

          實現代碼:

          public class MainActivity extends AppCompatActivity {

          private GestureDetector mDetector;

          private final static int MIN_MOVE=200; //最小距離

          private MyGestureListener mgListener;

          @Override

          protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_main);

          //實例化SimpleOnGestureListener與GestureDetector對象

          mgListener=new MyGestureListener();

          mDetector=new GestureDetector(this, mgListener);

          }

          @Override

          public boolean onTouchEvent(MotionEvent event) {

          return mDetector.onTouchEvent(event);

          }

          //自定義一個GestureListener,這個是View類下的,別寫錯哦!!!

          private class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

          @Override

          public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {

          if(e1.getY() - e2.getY() > MIN_MOVE){

          startActivity(new Intent(MainActivity.this, MainActivity.class));

          Toast.makeText(MainActivity.this, "通過手勢啟動Activity", Toast.LENGTH_SHORT).show();

          }else if(e1.getY() - e2.getY() < MIN_MOVE){

          finish();

          Toast.makeText(MainActivity.this,"通過手勢關閉Activity",Toast.LENGTH_SHORT).show();

          }

          return true;

          }

          }

          }

          結果分析: 從上面的對比就可以知道,相比起SimpleOnGestureListener使用SimpleOnGestureListener 顯得更加的簡單,想重寫什么方法就重寫什么方法,另外例子比較簡單,大家可以自己試試 其他玩法,比如通過手勢縮放圖片~


          4.手勢添加與識別:

          除了上面講解的手勢檢測外,Android還運行我們將手勢進行添加,然后提供了相關的識別API; Android中使用GestureLibrary來代表手勢庫,提供了GestureLibraries工具類來創建手勢庫!

          四個加載手勢庫的靜態方法:

          獲得GestureLibraries對象后,就可以使用該對象提供的下述方法來做相應操作了:

          相關方法:

          • public void addGesture (String entryName, Gesture gesture):添加一個名為entryName的手勢
          • public Set<String> getGestureEntries ():獲得手勢庫中所有手勢的名稱
          • public ArrayList<Gesture> getGestures (String entryName):獲得entryName名稱對應的全部手勢
          • public ArrayList<Prediction> recognize (Gesture gesture): 從當前手勢庫中識別與gesture匹配的全部手勢
          • public void removeEntry (String entryName):刪除手勢庫中entryName名稱對應的手勢
          • public void removeGesture (String entryName, Gesture gesture):刪除手勢庫中entryName和gesture都匹配的手勢
          • public abstract boolean save ():想手勢庫中添加手勢或從中刪除手勢后調用該方法保存手勢庫

          GestureOverlayView手勢編輯組件:

          Android為GestureOverlayView提供了三種監聽器接口,如下,一般常用的是:OnGesturePerformedListener;用于手勢完成時提供響應!


          5.手勢添加示例:

          PS:例子引用的是——李剛《Android瘋狂講義》的代碼

          運行效果圖:

          好吧,下面貼下實現代碼:

          兩個布局文件:activity_main.xml和dialog_save.xml

          activity_main.xml

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

          xmlns:tools="http://schemas.android.com/tools"

          android:layout_width="match_parent"

          android:layout_height="match_parent"

          android:orientation="vertical"

          tools:context=".MainActivity">

          <TextView

          android:layout_width="match_parent"

          android:layout_height="wrap_content"

          android:text="請在下方屏幕中繪制手勢~"

          android:textSize="20sp"/>

          <!-- gestureStrokeType控制手勢是否需要一筆完成,multiple表示允許多筆-->

          <android.gesture.GestureOverlayView

          android:id="@+id/gesture"

          android:layout_width="match_parent"

          android:layout_height="match_parent"

          android:gestureStrokeType="multiple" />

          </LinearLayout>

          dialog_save.xml

          <?xml version="1.0" encoding="utf-8"?>

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

          android:layout_width="match_parent"

          android:layout_height="match_parent"

          android:orientation="vertical">

          <LinearLayout

          android:layout_width="match_parent"

          android:layout_height="wrap_content"

          android:orientation="horizontal">

          <TextView

          android:layout_width="wrap_content"

          android:layout_height="wrap_content"

          android:layout_marginRight="8dp"

          android:text="請填寫手勢名稱:"/>

          <EditText

          android:layout_width="match_parent"

          android:layout_height="wrap_content"

          android:id="@+id/edit_name"/>

          </LinearLayout>

          <ImageView

          android:id="@+id/img_show"

          android:layout_width="128dp"

          android:layout_height="128dp"

          android:layout_marginTop="10dp"/>

          </LinearLayout>

          MainActivity.java:

          public class MainActivity extends AppCompatActivity {

          private EditText editText;

          private GestureOverlayView gesture;

          @Override

          protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_main);

          //獲取手勢編輯組件后,設置相關參數

          gesture=(GestureOverlayView) findViewById(R.id.gesture);

          gesture.setGestureColor(Color.GREEN);

          gesture.setGestureStrokeWidth(5);

          gesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {

          @Override

          public void onGesturePerformed(GestureOverlayView gestureOverlayView, final Gesture gesture) {

          View saveDialog=getLayoutInflater().inflate(R.layout.dialog_save,null,false);

          ImageView img_show=(ImageView) saveDialog.findViewById(R.id.img_show);

          final EditText edit_name=(EditText) saveDialog.findViewById(R.id.edit_name);

          Bitmap bitmap=gesture.toBitmap(128,128,10,0xffff0000);

          img_show.setImageBitmap(bitmap);

          new AlertDialog.Builder(MainActivity.this).setView(saveDialog)

          .setPositiveButton("保存",new DialogInterface.OnClickListener()

          {

          @Override

          public void onClick(DialogInterface dialogInterface, int i) {

          //獲取文件對應的手勢庫

          GestureLibrary gestureLib=GestureLibraries.fromFile("/mnt/sdcard/mygestures");

          gestureLib.addGesture(edit_name.getText().toString(),gesture);

          gestureLib.save();

          }

          }).setNegativeButton("取消", null).show();

          }

          });

          }

          }

          最后還需要在AndroidManifest.xml中添加寫入SD卡的權限:

          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


          6.手勢識別示例

          實現代碼:

          public class MainActivity extends AppCompatActivity {

          private GestureOverlayView gesture;

          private GestureLibrary gestureLibrary;

          private Context mContext;

          @Override

          protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_main);

          mContext=MainActivity.this;

          gestureLibrary=GestureLibraries.fromFile("mmt/sdcard/mygestures");

          if (gestureLibrary.load()) {

          Toast.makeText(mContext, "手勢庫加載成功", Toast.LENGTH_SHORT).show();

          } else {

          Toast.makeText(mContext, "手勢庫加載失敗", Toast.LENGTH_SHORT).show();

          }

          //獲取手勢編輯組件后,設置相關參數

          gesture=(GestureOverlayView) findViewById(R.id.gesture);

          gesture.setGestureColor(Color.GREEN);

          gesture.setGestureStrokeWidth(5);

          gesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {

          @Override

          public void onGesturePerformed(GestureOverlayView gestureOverlayView, final Gesture gesture) {

          //識別用戶剛繪制的手勢

          ArrayList<Prediction> predictions=gestureLibrary.recognize(gesture);

          ArrayList<String> result=new ArrayList<String>();

          //遍歷所有找到的Prediction對象

          for (Prediction pred : predictions) {

          if (pred.score > 2.0) {

          result.add("與手勢【" + pred.name + "】相似度為" + pred.score);

          }

          }

          if (result.size() > 0) {

          ArrayAdapter<Object> adapter=new ArrayAdapter<Object>(mContext,

          android.R.layout.simple_dropdown_item_1line, result.toArray());

          new AlertDialog.Builder(mContext).setAdapter(adapter,null).setPositiveButton("確定",null).show();

          }else{

          Toast.makeText(mContext,"無法找到匹配的手勢!",Toast.LENGTH_SHORT).show();

          }

          }

          });

          }

          }

          另外別忘了在AndroidManifest.xml文件中加入讀SD卡的權限:

          <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

          本節小結:

          好的,本節介紹了Android中的Gesture手勢,講解了手勢判斷,手勢添加,手勢識別三個內容 ,大部分例子來自于李剛老師的Android瘋狂講義,有興趣的可以看看該書

          族s6怎么關閉全面屏手勢置_魅族手機怎

          指紋識別往哪放?全面屏時代的難題

          從魅藍手機官微發布的圖片看,魅藍S6極可能搭載有最近火熱的屏下指紋識別技術。在之前的CES2018展會上,vivo在vivoX20Plus基礎上推出了全球首款采用屏下指紋識別的手機,引發全球轟動。這款手機采用了新思的屏下指紋識別芯片,不過并未在國內正式發布,也沒有開啟發售。

          vivo屏下指紋識別

          在屏下指紋識別技術出現前,大多數全面屏手機都選擇了取消Home鍵和物理導航鍵,將指紋識別鍵后置。據悉,魅藍S6為了達到18:9比例的全面屏效果也選擇了將mBack鍵取消。不過從魅藍手機官微發布的海報看,魅藍S6極有可能采用了屏下指紋識別技術。更有網友爆出了魅藍S6屏下指紋識別的視頻,并指出其采用的屏下指紋識別技術來自于匯頂科技。

          魅藍S6屏下指紋識別(圖片來自微博)

          匯頂科技用三星S7edge進行指紋識別(圖片來自互聯網)

          匯頂科技是國內最早研發屏下指紋識別技術的廠商之一。作為國內智能產品的上游供應商,其下游廠商提供的具有指紋識別功能的智能手機、平板電腦以及筆記本電腦,背后的技術均來自于匯頂科技的觸控與指紋識別方案。早在MWC2017,匯頂科技就對外展示過他們所研發的評下指紋識別技術。不過由于解鎖速度的原因,在當時并未大規模應用。

          在“全面屏元年”的大爆發后,用戶對于全面屏基礎上的技術創新更加期待。屏下指紋識別技術在vivo率先在CES上展出后立刻名聲大噪。如果魅藍S6真的采用了這一技術,不得不說,這很有可能成為一個極大的賣點。

          工信部真機圖(圖片來自互聯網)

          上文提到的魅藍M6s在視頻中采用了屏后指紋識別。而從工信部公布的真機圖以及側面指紋專利圖看,魅藍S6也可能采用側面指紋識別,在側邊位置有類似于索尼的指紋識別鍵。這兩種說法尚未獲得官方證實。魅藍S6到底采用哪種指紋識別方式,還要到發布會才能知曉。

          本文屬于原創文章,如若轉載,請注明來源:今年首款全面屏將至 魅藍S6有屏下指紋?//mobile.zol.com.cn/674/6748448.html

          以上是關于魅族魅藍S6產品評測的報道,有關魅族魅藍S6的外觀、屏幕、拍照、續航、性能等后續內容,請持續關注中關村在線關于魅族魅藍S6評測的報道。


          主站蜘蛛池模板: 毛片一区二区三区| 国产一区二区三区露脸| 国产一区二区三区小说| 国产日韩高清一区二区三区| 国产怡春院无码一区二区| 玩弄放荡人妻一区二区三区| 中字幕一区二区三区乱码 | 精品欧洲av无码一区二区| 久久免费国产精品一区二区| 久久精品一区二区三区中文字幕| 午夜性色一区二区三区不卡视频| 亚洲AV无码一区二区三区电影 | 亚洲欧美国产国产综合一区| 2022年亚洲午夜一区二区福利| 国产麻豆精品一区二区三区| 日产亚洲一区二区三区| 精品伦精品一区二区三区视频 | 精品无码国产一区二区三区麻豆| 亚洲AV无码一区二区乱子伦| 国产精品亚洲一区二区无码 | 国产乱码一区二区三区| 寂寞一区在线观看| 国产亚洲综合精品一区二区三区 | 国产亚洲综合精品一区二区三区 | 久久99国产精一区二区三区| 久久一本一区二区三区| 中文字幕一区二区三区四区 | 精品成人一区二区三区免费视频| 精品91一区二区三区| 日韩人妻精品一区二区三区视频| 一区视频在线播放| 色国产在线视频一区| 亚洲视频一区二区三区四区| 国产视频一区二区在线播放| 国产精品 一区 在线| 一区三区三区不卡| 一区二区精品在线观看| 在线一区二区观看| 国产伦精品一区二区三区四区| 伊人色综合视频一区二区三区| 日本在线一区二区|