這篇文章將為大家詳細(xì)講解有關(guān)Android仿iOS如何實(shí)現(xiàn)側(cè)滑返回功能,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),通遼網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:通遼等地區(qū)。通遼做網(wǎng)站價(jià)格咨詢:13518219792先上個(gè)效果再說:
原理
Activity 本身是不可以滑動(dòng)的,但是我們可以制造一個(gè)正在滑動(dòng) Activity 的假象,使得看起來這個(gè) Activity 正在被手指滑動(dòng)。其原理其實(shí)很簡(jiǎn)單,我們滑動(dòng)的其實(shí)是 Activity 里面的可見View元素,而我們將 Activity 設(shè)置為透明的,這樣當(dāng) View 滑過的時(shí)候,由于 Activity 的底部是透明的,我們就可以在滑動(dòng)過程中看到下面的Activity,這樣看起來就是在滑動(dòng) Activity。所以 Activity 滑動(dòng)效果分兩步:
設(shè)置 Activity 透明
滑動(dòng) View
實(shí)現(xiàn)
1、設(shè)置透明:
資源文件 values -> styles.xml 添加如下代碼,搞一個(gè)透明的主題。
<style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> </style>
然后在 AndroidManifest.xml 文件里面給相應(yīng)的 Activity 設(shè)置透明的主題。比如 MainActivity :
<activity android:name="com.example.test.MainActivity" android:theme="@style/Transparent" > </activity>
2、滑動(dòng)View:
先看看 Activity 的層次結(jié)構(gòu):我們用的 Activity 的 xml 的根 View 并不是 Activity 的根 View ,在它上面還有一個(gè)父 View, id 是 android.R.id.content,再向上一層,還有一個(gè)view,它是一個(gè) LinearLayout,它除了放置我們創(chuàng)建的 View 之外,還放置我們的 xml 之外的一些東西比如放 ActionBar 或者標(biāo)題欄什么的。而再往上一級(jí),就到了 Activity 的根 View —— DecorView,結(jié)構(gòu)
如下圖所示:
要做到像 iOS 那樣可以滑動(dòng)整個(gè) Activity ,只滑動(dòng)我們?cè)趚ml里面創(chuàng)建的 View 顯然是不對(duì)的,因?yàn)槲覀冞€有標(biāo)題欄、ActionBar 什么的,所以我們要滑動(dòng)的應(yīng)該是 DecorView 或者倒數(shù)第二層的那個(gè) View。
而要滑動(dòng) View的話,我們要重寫其父窗口的 onInterceptTouchEvent 以及 onTouchEvent(當(dāng)然使用 setOnTouchListener 不是不可能,但是如果子 View 里面有一個(gè)消費(fèi)了 onTouch 事件,那么也就接收不到了),但是窗口的創(chuàng)建過程不是我們能控制的,DecorView 的創(chuàng)建都不是我們能干預(yù)的。
解決辦法就是,我們自己創(chuàng)建一個(gè) SwipeLayout,然后人為地插入頂層 View 中,放置在 DecorView 和其下面的 LinearLayout 中間,隨著手指的滑動(dòng),不斷改變 SwipeLayout 的子 View ——曾經(jīng)是 DecorView 的子 View——的位置,這樣我們就可以控制 Activity 的滑動(dòng)啦。我們?cè)?Activity 的 onPostCreate 方法中調(diào)用swipeLayout.replaceLayer 替換我們的 SwipeLayout,代碼如下:
public void replaceLayer(Activity activity) { mActivity = activity; screenWidth = getScreenWidth(activity); setClickable(true); //獲取 Activity 的 根 View ViewGroup root = (ViewGroup) activity.getWindow().getDecorView(); //獲取 根 View 下面的第一個(gè) View,并保存到 content content = root.getChildAt(0); ViewGroup.LayoutParams params = content.getLayoutParams(); ViewGroup.LayoutParams params2 = new ViewGroup.LayoutParams(-1, -1); //把根 View 下面原來的第一個(gè) View 刪除 root.removeView(content); //把 content 添加到 SwipeLayout this.addView(content, params2); //再把 SwipeLayout 添加到根 View 里面 root.addView(this, params); sideWidth = (int) (sideWidthInDP * activity.getResources().getDisplayMetrics().density); }
然后把這些寫成一個(gè) SwipeActivity 要求實(shí)現(xiàn)側(cè)滑返回的 Activity 繼承 SwipeActivity , SwipeActivity 繼承 FragmentActivity 或者 Activity 。比如 MainActivity:
public class SwipeActivity extends FragmentActivity { ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } ... }
public class MainActivity extends SwipeActivity { ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } ... }Android是什么
Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由美國(guó)Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。
關(guān)于“Android仿iOS如何實(shí)現(xiàn)側(cè)滑返回功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:Android仿iOS如何實(shí)現(xiàn)側(cè)滑返回功能-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article16/dhhogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容