一、手勢滑動(dòng)
創(chuàng)新互聯(lián)是一家專業(yè)從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!
1.Activity都具有響應(yīng)觸摸事件,也就是說只要觸摸Activity,他都會(huì)回調(diào)一個(gè)onTouchEvent()方法。但是在這個(gè)方法里無法處理事件,需要配合使用手勢識(shí)別器(GestureDetector)中的方法onTouchEvent對事件(event)進(jìn)行分析處理,我們只需要重寫這個(gè)方法中的操作來達(dá)到我們的需求。
/** * activity被觸摸后,會(huì)回調(diào)此方法onTouchEvent,并回傳一個(gè)event對象 * event對象封裝了觸摸時(shí)的動(dòng)作信息,包括x、y坐標(biāo)等等信息 */ @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub boolean onTouchEvent = gestureDetector.onTouchEvent(event); //如果這個(gè)方法消費(fèi)了這個(gè)這個(gè)event事件,就返回True,否則false。 return super.onTouchEvent(event); }
2.我們需要根據(jù)滑動(dòng)手勢做界面跳轉(zhuǎn),GestureDetector封裝了可以監(jiān)聽不同手勢的方法。這個(gè)方法在哪個(gè)Activity中使用,這個(gè)Activity就能監(jiān)聽這個(gè)Activity接收的動(dòng)作,在這些方法里可以重寫需要的動(dòng)作。
GestureDetector gestureDetector = new GestureDetector(this, new OnGestureListener(){ @Override public boolean onDown(MotionEvent e) { // 按下 return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // 點(diǎn)擊 return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // 滑動(dòng) return false; } @Override public void onLongPress(MotionEvent e) { // 長按 } /** *滑動(dòng), e1為起點(diǎn)坐標(biāo),e2為終點(diǎn)坐標(biāo) *在這里消費(fèi)掉event事件,重寫其中的方法以達(dá)到需求。 / @Override public boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) { if(e1.getRawX()-e2.getRawX()>200){ flingnextpage(); //向左滑(與滑動(dòng)動(dòng)畫配合效果較好) }else if(e2.getRawX()-e1.getRawX()>200){ flingpreviouspage();//向右滑 } if(Math.abs(e1.getRawY()-e2.getRawY())>200){ System.out.println("不能斜著滑動(dòng)"); return true;//true表示我們消費(fèi)了這個(gè)觸摸事件 } if(Math.abs(velocityX)<150 ||Math.abs(velocityY)<100){ System.out.println("滑動(dòng)的太慢了,請滑快點(diǎn)"); return true; } return true; } });
注:頁面坐標(biāo)
二、簡單動(dòng)畫
目的:用XML文件寫一個(gè)Activity跳轉(zhuǎn)頁面的過渡動(dòng)畫。
1. 在res目錄下新建anim文件夾,創(chuàng)建兩個(gè)xml文件并編輯動(dòng)畫動(dòng)作,一個(gè)是進(jìn)入動(dòng)作,另一個(gè)退出動(dòng)作。
(1)在anim_next_in.xml中寫好進(jìn)入動(dòng)作。
<?xml version="1.0" encoding="utf-8"?>android:toXDelta="0" android:duration="100" xmlns:android="http://schemas.android.com/apk/res/android">
(2)在anim_next_out.xml中寫好退出動(dòng)作。
<?xml version="1.0" encoding="utf-8"?>android:toXDelta="-100%p" android:duration="100" xmlns:android="http://schemas.android.com/apk/res/android">
2.調(diào)用Activity的overridePendingTransition方法,來實(shí)現(xiàn)平移動(dòng)畫。
/** * overridePendingTransition(int enterAnim, int exitAnim) * enterAnim為進(jìn)入當(dāng)前界面的動(dòng)畫資源ID, exitAnim為退出當(dāng)前界面的動(dòng)畫資源ID / @Override public void flingnextpage() { // TODO Auto-generated method stub startActivity(new Intent(this, NewActivity.class)); overridePendingTransition(R.anim.anim_next_in, R.anim.anim_next_out); finish();//關(guān)閉當(dāng)前界面 }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。