1. android的雙指手勢是怎麼實現的
android對多點觸摸的支持
使用MotionEvent對象方式處理,比如開始觸控時會觸發ACTION_DOWN而移動操作時為 ACTION_MOVE最終放開手指時觸發ACTION_UP事件。當然還有用戶無規則的操作可能觸發ACTION_CANCEL這個動作。
對於onTouchEvent方法的參數MotionEvent我們可以詳細處理來實現對多點觸控的了解,
2. uc瀏覽器安卓版可以設置手勢嗎
您好,很高興為您服務!
UC瀏覽器支持手勢功能,單指-左滑退後、右滑前進、上下滑動翻頁。
雙指-左右滑動切換窗口(多窗口時),上滑關閉當前窗口、下滑新建窗口。
雙指-合攏縮小頁面,張開放大頁面。最新版的瀏覽器,在菜單-設置-基本設置中可以找到滑屏前進後退的開關哦。現在是有哪一方面的需求呢,是希望能夠自定義手勢么?
如果仍有問題,請您繼續向我們反饋,我們會第一時間為您跟進。
3. 如何在android中實現swipe的手勢功能及頁面拖動動畫
SimpleOnGestureListener. 你只需要實現自己所關心的手勢就可以了.
Swipe在android裡面是叫Fling ^_^
首先創建自己的一個手勢detector類:
private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200;然後在onFling方法中, 判斷是不是一個合理的swipe動作: if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); }里的viewFlipper是含有多個view的一個container, 可以很方便的調用prev/next view, 加上animation動畫, 可以達到一些不錯的效果:
viewFlipper = (ViewFlipper)findViewById(R.id.flipper); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 自定義的animation可以查看具體的XML, 比如從左邊進來的一個動畫:
4. android手機有哪些手勢操作,能具體點嗎
android手機有哪些手勢操作:
「點擊」,也叫「單擊」,即輕觸屏幕一下。無論是搭載何種操作系統的觸控手機,這個都是出現頻率最高的動作。點擊主要用來打開程序,還有功能表(抽屜)。
「點住」,也叫「長按」、「按住」,按住屏幕超過兩秒。此動作通常用來調出「菜單」。某些應用程序在界面空白處長按可以調出菜單;某些條目長按也可以彈出菜單,比如當您需要轉發簡訊時,在簡訊對話界面長按簡訊內容,必然會彈出菜單,菜單中通常會有「轉發」選項。
在進行文字編輯時,點住文字部分,然後調出遊標進行精準定位。
當然,此動作也可用於多選、快捷視圖,比如在「圖庫(相冊)」中,默認視圖下,長按相冊文件夾、可對文件夾進行多選操作;打開相冊文件夾後,長按照片,同樣可對照片進行多選操作,選擇完畢後可進行批量操作(發送、刪除)。
「拖動」,准確來說應該叫做「按住並拖動」。「拖動」主屏幕編輯時的常見動作,比如對桌面「小組件」或者「圖標」進行位置編輯時。另外也用於進度定位,比如播放音樂或者視頻時,需要常常拖動進度條。
「雙擊」就是短時間內連續雙擊屏幕兩次,主要用於快速縮放,比如瀏覽圖片時雙擊可以快速放大,再次雙擊可以復位;瀏覽網頁時,對文章正文部分雙擊可使文字自適應屏幕,當然某些視頻播放器雙擊可切換至全屏模式。
滑動,也算是一個常見操作。主要用於查看屏幕無法完全顯示的頁面,功能類似滑鼠的滾輪。此操作主要用於查看圖片、網頁、純文本(簡訊、郵件、筆記)。
某些視頻播放器還定義了特殊功能,比如亮度調節、快進快退,比如「MX Player」、「VPlayer」。
「縮放」動作,是查看圖片、網頁時最常見的操作,照相時也可使用縮放手勢來進行調焦。在MX Player中,甚至可以將視頻畫面進行縮放。
5. Android中如何讓手勢和滾動視圖滑動方向一致
概述介紹
app在滑動視圖列表的時候會動態的將ActionBar(Toolbar)隱藏(向下滑動顯示,向上滑動隱藏),以留下更多的空間來顯示內容。
視圖布局
原理:採用自定義Toolbar和ListView來實現;
具體操作
採用自定義Toolbar所以得更改默認布局,使用不帶ActionBar的主題。
其他要素
基本成型的布局了,代碼中沒有什麼注釋,看代碼的速度要遠勝於看注釋速度。由於代碼都是常用的,寫大量的注釋反而感覺很多餘。
獲取到手勢滑動的方向和距離,以此來判斷是上滑還是下滑。
上滑:將Toolbar隱藏,下滑:將Toolbar顯示。
6. android 自定義相機拍照界面 手勢設置焦距問題
這個拍照界面是每個廠家的ROM都不一樣的,如果你喜歡小米的拍照界面,你可以把手機系統刷成小米ROM,不能刷的話,你也可以通過第三方APP解決,比如美圖秀秀,360拍照都有手勢設置焦距的功能。
7. 使用安卓系統的手機怎麼設置手勢鎖屏
安卓手機設置鎖屏密碼的方法:
注意:各台設備上的 Android 系統不盡相同。這些說明僅適用於運行 Android 7.0 及以上版本的設備。查看 Android 系統版本參考設置。
1、打開設備的「設置」應用
2、在「個人」下方,點按安全。
3、要更改屏幕鎖定設置,請點按「屏幕鎖定」旁邊的「設置」。具體設置包括自動鎖定前的等待時間、電源按鈕鎖定和鎖定屏幕消息。
4、要選擇一種屏幕鎖定方式,請點按屏幕鎖定方式。
如果已設置鎖定方式,則必須先輸入 PIN 碼、密碼或繪制解鎖圖案,然後才能選擇其他鎖定選項。
點按想要使用的屏幕鎖定選項,然後按照屏幕上的說明操作。
注意:「密碼」方式會要求至少輸入 4 個字母或數字。只要您能設置一個安全系數高的密碼,這就是最安全的選項。
8. android手勢識別,自定義View,滑動後長按無效,這個問題怎麼處理啊
你的意思是處於滑動狀態中停留2秒作為長按么?要知道,長按和滑動是互斥的,若按下後滑動,則會取消掉判斷長按的。
9. Android 自定義ImageView添加手勢後,移動或縮放怎麼判斷越界的問題
初始化的時候已經進行了縮放
Java code
//第一個圖片
float scaleX = w / leftImage.getWidth();
float scaleY = h / leftImage.getHeight();
leftMinScale = scaleX > scaleY ? scaleX : scaleY;
leftMatrix.setScale(leftMinScale, leftMinScale);
10. android怎樣可以控制手勢滑動的
我們先來明確一些概念,首先,Android的事件處理機制是基於Listener(監聽器)來實現的,比我們今天所說的觸摸屏相關的事件,就是通 過onTouchListener。其次,所有View的子類都可以通過setOnTouchListener()、 setOnKeyListener()等方法來添加對某一類事件的監聽器。第三,Listener一般會以Interface(介面)的方式來提供,其中 包含一個或多個abstract(抽象)方法,我們需要實現這些方法來完成onTouch()、onKey()等等的操作。這樣,當我們給某個view設 置了事件Listener,並實現了其中的抽象方法以後,程序便可以在特定的事件被dispatch到該view的時候,通過callbakc函數給予適 當的響應。
看一個簡單的例子,就用最簡單的TextView來說明(事實上和ADT中生成的skeleton沒有什麼區別)。
Java代碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// init TextView
TextView tv = (TextView) findViewById(R.id.page);
// set OnTouchListener on TextView
tv.setOnTouchListener(this);
// show some text
tv.setText(R.string.text);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(this, "onTouch", Toast.LENGTH_SHORT).show();
return false;
}
我們給TextView的實例tv設定了一個onTouchListener,因為GestureTest類實現了OnTouchListener 介面,所以簡單的給一個this作為參數即可。onTouch方法則是實現了OnTouchListener中的抽象方法,我們只要在這里添加邏輯代碼即 可在用戶觸摸屏幕時做出響應,就像我們這里所做的——打出一個提示信息。
這里,我們可以通過MotionEvent的getAction()方法來獲取Touch事件的類型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。ACTION_DOWN是指按下觸摸屏,ACTION_MOVE是指按下觸摸屏後移動受力點,ACTION_UP則是指松 開觸摸屏,ACTION_CANCEL不會由用戶直接觸發(所以不在今天的討論范圍,請參考ViewGroup.onInterceptTouchEvent(MotionEvent))。藉助對於用戶不同操作的判斷,結合getRawX()、getRawY()、getX()和getY()等方法來獲取坐標後,我們可以實現諸如拖動某一個按鈕,拖動滾動條等功能。待機可以看看MotionEvent類的文檔,另外也可以看考TouchPaint例子。
回到今天所要說的重點,當我們捕捉到Touch操作的時候,如何識別出用戶的Gesture?這里我們需要GestureDetector.OnGestureListener介面的幫助,於是我們的GestureTest類就變成了這個樣子。
Java代碼
public class GestureTest extends Activity implements OnTouchListener,
OnGestureListener {
....
}
隨後,在onTouch()方法中,我們調用GestureDetector的onTouchEvent()方法,將捕捉到的MotionEvent交給 GestureDetector 來分析是否有合適的callback函數來處理用戶的手勢。
Java代碼
@Override
public boolean onTouch(View v, MotionEvent event) {
// OnGestureListener will analyzes the given motion event
return mGestureDetector.onTouchEvent(event);
}
接下來,我們實現了以下6個抽象方法,其中最有用的當然是onFling()、onScroll()和onLongPress()了。我已經把每一個方法代表的手勢的意思寫在了注釋里,大家看一下就明白了。
// 用戶輕觸觸摸屏,由1個MotionEvent ACTION_DOWN觸發Java代碼
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
return false;
}
// 用戶輕觸觸摸屏,尚未松開或拖動,由一個1個MotionEvent ACTION_DOWN觸發
// 注意和onDown()的區別,強調的是沒有松開或者拖動的狀態
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
用戶(輕觸觸摸屏後)松開,由一個1個MotionEvent ACTION_UP觸發
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
用戶按下觸摸屏、快速移動後松開,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE, 1個ACTION_UP觸發
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
// 用戶長按觸摸屏,由多個MotionEvent ACTION_DOWN觸發
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
// 用戶按下觸摸屏,並拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// TODO Auto-generated method stub
return false;
}
我們來試著做一個onFling()事件的處理吧,onFling()方法中每一個參數的意義我寫在注釋中了,需要注意的是Fling事件的處理代 碼中,除了第一個觸發Fling的ACTION_DOWN和最後一個ACTION_MOVE中包含的坐標等信息外,我們還可以根據用戶在X軸或者Y軸上的 移動速度作為條件。比如下面的代碼中我們就在用戶移動超過100個像素,且X軸上每秒的移動速度大於200像素時才進行處理。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 參數解釋:
// e1:第1個ACTION_DOWN MotionEvent
// e2:最後一個ACTION_MOVE MotionEvent
// velocityX:X軸上的移動速度,像素/秒
// velocityY:Y軸上的移動速度,像素/秒
// 觸發條件 :
// X軸的坐標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling left
Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
} else
if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling right
Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
}
return false;
}
問題是,這個時候如果我們嘗試去運行程序,你會發現我們根本得不到想要的結果,跟蹤代碼的執行的會發現onFling()事件一直就沒有被捕捉到。這正是一開始困擾我的問題,這到底是為什麼呢?
我在討論組的Gesture detection這個帖子里找到了答案,即我們需要在onCreate中tv.setOnTouchListener(this);之後添加如下一句代碼。
tv.setLongClickable(true);
只有這樣,view才能夠處理不同於Tap(輕觸)的hold(即ACTION_MOVE,或者多個ACTION_DOWN),我們同樣可以通過layout定義中的android:longClickable來做到這一點。
這次遇到的這個問題和上次MapView中setOnKeyListener遇到的問題挺類似,其實都是對SDK的了解不夠全面,遇到了一次記住了就好。不過話說回來,Google在文檔方面確實需要加強了,起碼可以在OnGestureListener中說明需要滿足那些條件才可以保證手勢被正確識別。