Ⅰ android手機有哪些手勢操作,能具體點嗎
android手機有哪些手勢操作:
「點擊」,也叫「單擊」,即輕觸屏幕一下。無論是搭載何種操作系統的觸控手機,這個都是出現頻率最高的動作。點擊主要用來打開程序,還有功能表(抽屜)。
「點住」,也叫「長按」、「按住」,按住屏幕超過兩秒。此動作通常用來調出「菜單」。某些應用程序在界面空白處長按可以調出菜單;某些條目長按也可以彈出菜單,比如當您需要轉發簡訊時,在簡訊對話界面長按簡訊內容,必然會彈出菜單,菜單中通常會有「轉發」選項。
在進行文字編輯時,點住文字部分,然後調出遊標進行精準定位。
當然,此動作也可用於多選、快捷視圖,比如在「圖庫(相冊)」中,默認視圖下,長按相冊文件夾、可對文件夾進行多選操作;打開相冊文件夾後,長按照片,同樣可對照片進行多選操作,選擇完畢後可進行批量操作(發送、刪除)。
「拖動」,准確來說應該叫做「按住並拖動」。「拖動」主屏幕編輯時的常見動作,比如對桌面「小組件」或者「圖標」進行位置編輯時。另外也用於進度定位,比如播放音樂或者視頻時,需要常常拖動進度條。
「雙擊」就是短時間內連續雙擊屏幕兩次,主要用於快速縮放,比如瀏覽圖片時雙擊可以快速放大,再次雙擊可以復位;瀏覽網頁時,對文章正文部分雙擊可使文字自適應屏幕,當然某些視頻播放器雙擊可切換至全屏模式。
滑動,也算是一個常見操作。主要用於查看屏幕無法完全顯示的頁面,功能類似滑鼠的滾輪。此操作主要用於查看圖片、網頁、純文本(簡訊、郵件、筆記)。
某些視頻播放器還定義了特殊功能,比如亮度調節、快進快退,比如「MX Player」、「VPlayer」。
「縮放」動作,是查看圖片、網頁時最常見的操作,照相時也可使用縮放手勢來進行調焦。在MX Player中,甚至可以將視頻畫面進行縮放。
Ⅱ android編程 三個手指的手勢怎麼實現啊
event.getPointerCount可以獲取到。
Ⅲ Android 手勢縮放一個布局,布局裡面有控制項,跟隨縮放,求demo
給出思路:
在代碼中獲得要旋轉的布局;
監聽布局的OnTouch事件;
當觸發滑動事件後,創建一個旋轉動畫,將動畫賦予布局;
布局中的控制項注冊自己的監聽器,跟這個旋轉沒有影響。
這個是我想到的,沒試驗,題主可以試試。
有疑問,請追問。望採納!
Ⅳ android手勢密碼怎麼搞
關機 按住音量鍵上+電源鍵開機 開機有個機器人的圖像 按home鍵(像房子)進入recovery模式 選擇wipe data/factory reset 按菜單鍵 選擇yes.....點菜單鍵恢復出廠設置 然後選擇reboot aystem now 按菜單鍵重新啟動 這是安卓手機的解鎖方法 由於機型不同 進入recovery模式的方法不同 請到網路查找對應機型進入recovery模式的方法!
Ⅳ 如何通過手勢實現android view 的 縮放 平移
代碼主要分兩部分,一個activity一個view,代碼如下:
java">packagecom.example.touch;
importandroid.app.Activity;
importandroid.os.Bundle;
{
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
TouchImageViewimg=newTouchImageView(this);
setContentView(img);
}
}
packagecom.example.touch;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Matrix;
importandroid.graphics.PointF;
importandroid.util.DisplayMetrics;
importandroid.util.FloatMath;
importandroid.view.MotionEvent;
importandroid.widget.ImageView;
{
floatx_down=0;
floaty_down=0;
PointFstart=newPointF();
PointFmid=newPointF();
floatoldDist=1f;
floatoldRotation=0;
Matrixmatrix=newMatrix();
Matrixmatrix1=newMatrix();
MatrixsavedMatrix=newMatrix();
privatestaticfinalintNONE=0;
privatestaticfinalintDRAG=1;
privatestaticfinalintZOOM=2;
intmode=NONE;
booleanmatrixCheck=false;
intwidthScreen;
intheightScreen;
Bitmapgintama;
publicTouchImageView(){
super(activity);
gintama=BitmapFactory.decodeResource(getResources(),R.drawable.gintama);
DisplayMetricsdm=newDisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
widthScreen=dm.widthPixels;
heightScreen=dm.heightPixels;
matrix=newMatrix();
}
protectedvoidonDraw(Canvascanvas){
canvas.save();
canvas.drawBitmap(gintama,matrix,null);
canvas.restore();
}
publicbooleanonTouchEvent(MotionEventevent){
switch(event.getAction()&MotionEvent.ACTION_MASK){
caseMotionEvent.ACTION_DOWN:
mode=DRAG;
x_down=event.getX();
y_down=event.getY();
savedMatrix.set(matrix);
break;
caseMotionEvent.ACTION_POINTER_DOWN:
mode=ZOOM;
oldDist=spacing(event);
oldRotation=rotation(event);
savedMatrix.set(matrix);
midPoint(mid,event);
break;
caseMotionEvent.ACTION_MOVE:
if(mode==ZOOM){
matrix1.set(savedMatrix);
floatrotation=rotation(event)-oldRotation;
floatnewDist=spacing(event);
floatscale=newDist/oldDist;
matrix1.postScale(scale,scale,mid.x,mid.y);//縮放
matrix1.postRotate(rotation,mid.x,mid.y);//旋轉
matrixCheck=matrixCheck();
if(matrixCheck==false){
matrix.set(matrix1);
invalidate();
}
}elseif(mode==DRAG){
matrix1.set(savedMatrix);
matrix1.postTranslate(event.getX()-x_down,event.getY()
-y_down);//平移
matrixCheck=matrixCheck();
matrixCheck=matrixCheck();
if(matrixCheck==false){
matrix.set(matrix1);
invalidate();
}
}
break;
caseMotionEvent.ACTION_UP:
caseMotionEvent.ACTION_POINTER_UP:
mode=NONE;
break;
}
returntrue;
}
privatebooleanmatrixCheck(){
float[]f=newfloat[9];
matrix1.getValues(f);
//圖片4個頂點的坐標
floatx1=f[0]*0+f[1]*0+f[2];
floaty1=f[3]*0+f[4]*0+f[5];
floatx2=f[0]*gintama.getWidth()+f[1]*0+f[2];
floaty2=f[3]*gintama.getWidth()+f[4]*0+f[5];
floatx3=f[0]*0+f[1]*gintama.getHeight()+f[2];
floaty3=f[3]*0+f[4]*gintama.getHeight()+f[5];
floatx4=f[0]*gintama.getWidth()+f[1]*gintama.getHeight()+f[2];
floaty4=f[3]*gintama.getWidth()+f[4]*gintama.getHeight()+f[5];
//圖片現寬度
doublewidth=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
//縮放比率判斷
if(width<widthScreen/3||width>widthScreen*3){
returntrue;
}
//出界判斷
if((x1<widthScreen/3&&x2<widthScreen/3
&&x3<widthScreen/3&&x4<widthScreen/3)
||(x1>widthScreen*2/3&&x2>widthScreen*2/3
&&x3>widthScreen*2/3&&x4>widthScreen*2/3)
||(y1<heightScreen/3&&y2<heightScreen/3
&&y3<heightScreen/3&&y4<heightScreen/3)
||(y1>heightScreen*2/3&&y2>heightScreen*2/3
&&y3>heightScreen*2/3&&y4>heightScreen*2/3)){
returntrue;
}
returnfalse;
}
//觸碰兩點間距離
privatefloatspacing(MotionEventevent){
floatx=event.getX(0)-event.getX(1);
floaty=event.getY(0)-event.getY(1);
returnFloatMath.sqrt(x*x+y*y);
}
//取手勢中心點
privatevoidmidPoint(PointFpoint,MotionEventevent){
floatx=event.getX(0)+event.getX(1);
floaty=event.getY(0)+event.getY(1);
point.set(x/2,y/2);
}
//取旋轉角度
privatefloatrotation(MotionEventevent){
doubledelta_x=(event.getX(0)-event.getX(1));
doubledelta_y=(event.getY(0)-event.getY(1));
doubleradians=Math.atan2(delta_y,delta_x);
return(float)Math.toDegrees(radians);
}
//將移動,縮放以及旋轉後的圖層保存為新圖片
//本例中沒有用到該方法,需要保存圖片的可以參考
publicBitmapCreatNewPhoto(){
Bitmapbitmap=Bitmap.createBitmap(widthScreen,heightScreen,
Config.ARGB_8888);//背景圖片
Canvascanvas=newCanvas(bitmap);//新建畫布
canvas.drawBitmap(gintama,matrix,null);//畫圖片
canvas.save(Canvas.ALL_SAVE_FLAG);//保存畫布
canvas.restore();
returnbitmap;
}
}
Ⅵ Android通過手勢實現的縮放處理,該怎麼解決
主要原理是onTouchEvent事件中的參數MotionEvent,它有一個getSize()方法。在一個點的時候,該方法永遠返回0,而在兩個
觸電的時候,該方法則根據兩點相對位置變化而返回不同的值。我們只需計算出兩點之間的距離變化,距離的大小表明我們希望目標變化的趨勢。而getX()和
getY()方法則永遠座落在兩觸點之間,這樣趨勢和目標我們都有了。剩下的就是對目標根據趨勢進行放大或縮小即可。參考代碼如下。
/**
*...
*
*@authorvlinux
*
*/
{
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
Viewview=newMultiTouchView(this);
setContentView(view);
}{
privatefloatx1;
privatefloaty1;
privatefloatx2;
privatefloaty2;
publicMultiTouchView(Contextcontext){
super(context);
//TODOAuto-generatedconstructorstub
}
@Override
publicbooleanonTouchEvent(MotionEventevent){
//TODOAuto-generatedmethodstub
floatsize=event.getSize();
intszi=(int)size;
intdxi=szi>>12;
intdyit=((1<<12)-1);
intdyi=szi&dyit;
DisplayMetricsmetrics=getResources().getDisplayMetrics();
floatdx=metrics.widthPixels*dxi/(float)dyit;
floatdy=metrics.heightPixels*dyi/(float)dyit;
x1=event.getX();
y1=event.getY();
x2=x1+dx;
y2=y1+dy;
invalidate();
returntrue;
}
@Override
protectedvoidonDraw(Canvascanvas){
//TODOAuto-generatedmethodstub
super.onDraw(canvas);
floatr=(float)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)
*(y1-y2))/2;
r=50>=r?50:r;
Paintpaint=newPaint();
paint.setColor(Color.BLUE);
canvas.drawCircle(x1,y1,r,paint);
}
}
}
Ⅶ android 雙指手勢問題
判斷pointer1和pointer2的down,同時為down時在move事件中去做距離的計算(起始距離至少為60),記錄兩點的起始位置和結束位置。當兩點起始距離達到要求的時候執行跳轉。
如果你要做角度。(只允許這一種情況下)左邊的起始X肯定大於結束X,起始Y肯定大於結束Y;右邊的起始X肯定小於結束X,起始Y肯定大於結束Y。
Ⅷ 如何調用原生android的手勢九宮格
sdk沒有提供原生的手勢九宮格。需要使用自定義View自己做一個。
舉例:網頁鏈接
Ⅸ 安卓全面屏手勢求教
樂意為你解答。
側滑返回,
從下往上滑回到主桌面,
從下往上並長時停頓開啟多任務。
Ⅹ android 手勢判斷是橫向滑動還是縱向 csdn
對於Android中的手勢識別可以從以下三個Listener入手——OnTouchListener、OnGestureListener、OnDoubleTapListener。這三個監聽器分別是觸摸監聽、手勢滑動監聽和屏幕雙擊操作監聽。很多的時候我們需要這些手勢識別的操作,例如我們自定義控制項的時候就經常會用到。下面就對這三個監聽器分別進行介紹。
觸摸監聽器OnTouchListener
讓我們的Activity去現實此介面,並重寫onTouch方法。重寫OnTouchListener的onTouch方法 此方法在觸摸屏被觸摸,即發生觸摸事件(接觸和撫摸兩個事件)的時候被調用。示範代碼如下:
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
Toast.makeText(this, "onTouch", TIME_OUT).show();
return true;
}
手勢滑動監聽器OnGestureListener
讓我們的Activity去現實此介面,並重寫onFling、onLongPress、onScroll、onDown、onShowPress、onSingleTapUp方法。示範代碼如下:
/**
* 手勢滑動時別調用
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE) {
Toast.makeText(this, "向左滑動", TIME_OUT).show();
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE) {
Toast.makeText(this, "向右滑動", TIME_OUT).show();
}
return false;
}
/**
* 長按時被調用
*/
@Override
public void onLongPress(MotionEvent e) {
Toast.makeText(this, "觸發長按回調", TIME_OUT).show();
}
/**
* 滾動時調用
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
Toast.makeText(this, "觸發滾動回調", TIME_OUT).show();
return false;
}
/**
* 在按下動作時被調用
*/
@Override
public boolean onDown(MotionEvent e) {
Toast.makeText(this, "按下回調", TIME_OUT).show();
return false;
}
/**
* 按住時被調用
*/
@Override
public void onShowPress(MotionEvent e) {
Toast.makeText(this, "按住不松回調", TIME_OUT).show();
}
/**
* 抬起時被調用
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
Toast.makeText(this, "觸發抬起回調", TIME_OUT).show();
return false;
}
雙擊屏幕監聽器OnDoubleTapListener
讓我們的Activity去現實此介面,並重寫onDoubleTap、onDoubleTapEvent、onSingleTapConfirmed方法。示範代碼如下:
@Override
public boolean onDoubleTap(MotionEvent arg0) {
Toast.makeText(this, "觸發雙擊回調", TIME_OUT).show();
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent arg0) {
Toast.makeText(this, "觸發雙擊的按下跟抬起回調", TIME_OUT).show();
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent arg0) {
Toast.makeText(this, "觸發單擊確認回調", TIME_OUT).show();
return false;
}