多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android 向右滑動關閉頁面

Android 向右滑動關閉頁面

來源:程序員人生   發布時間:2014-12-09 08:13:08 閱讀次數:3844次

前言:

用最簡單的例子來講明此問題。

1.在Activity中加上默許的布局Layout

2.在自定義的Layout中實現右滑關閉Activity的邏輯

 直接上代碼!

自定義的布局HFFinishRelativeLayout!

package com.huofar.widget; import android.content.Context; import android.content.res.TypedArray; import android.support.v4.app.FragmentActivity; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewGroup; import android.widget.RelativeLayout; import com.huofar.util.LogUtil; /** * Created by zhangxiwei on 14/11/25. */ public class HFFinishRelativeLayout extends RelativeLayout{ private static final String TAG = LogUtil.makeLogTag(HFFinishRelativeLayout.class); public interface ScrollLeftFinishListener{ public void finishPage(); } FragmentActivity activity; private ScrollLeftFinishListener scrollLeftFinishListener; public void setScrollLeftFinishListener(ScrollLeftFinishListener scrollLeftFinishListener) { this.scrollLeftFinishListener = scrollLeftFinishListener; } // 滑動距離及坐標 private float xDistance, yDistance, xLast, yLast; public HFFinishRelativeLayout(Context context) { super(context); } public HFFinishRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public void attachToActivity(FragmentActivity activity) { this.activity = activity; TypedArray a = activity.getTheme().obtainStyledAttributes( new int[] { android.R.attr.windowBackground }); int background = a.getResourceId(0, 0); a.recycle(); ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView(); ViewGroup decorChild = (ViewGroup) decor.getChildAt(0); decorChild.setBackgroundResource(background); decor.removeView(decorChild); addView(decorChild); decor.addView(this); } @Override public boolean onInterceptTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: } return super.onInterceptTouchEvent(event); }
@Override
public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = event.getX(); yLast = event.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = event.getX(); final float curY = event.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); if (curX > xLast && xDistance > yDistance && xDistance > 300) { if(scrollLeftFinishListener != null){ xLast = curX; yLast = curY; scrollLeftFinishListener.finishPage(); return true; } } xLast = curX; yLast = curY; } return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; } <strong><span style="color:#ff6666;">return true;</span></strong> } }
重點觀看上面的紅色加粗字段。

我處理的是每次滑動向右滑動300px履行關閉操作,在需要的使用的Activity實現借口直接finish就OK了!

Activity中的調用:

package com.huofar.activity; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import com.huofar.R; import com.huofar.widget.HFFinishRelativeLayout; /** * Created by zhangxiwei on 14/11/25. */ public class HFBaseActivity extends FragmentActivity implements HFFinishRelativeLayout.ScrollLeftFinishListener { private boolean isFinishScrollLeft; HFFinishRelativeLayout hfFinishRelativeLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); isFinishScrollLeft = true; //延后為了等待需要屏蔽返回滑動接受參數 new Handler().postAtTime(new Runnable() { @Override public void run() { setFinishScrollLeft(isFinishScrollLeft); } },1000); } public void setFinishScrollLeft(boolean isFinishScrollLeft) { this.isFinishScrollLeft = isFinishScrollLeft; if(isFinishScrollLeft){ if(isFinishScrollLeft) { hfFinishRelativeLayout = (HFFinishRelativeLayout) LayoutInflater.from(this).inflate( R.layout.activity_finish_base, null); hfFinishRelativeLayout.attachToActivity(this); hfFinishRelativeLayout.setScrollLeftFinishListener(this); } } } @Override public void finishPage() { finish(); } }

所有的代碼就是這點,延遲1秒的就是為了接受isFinishScrollLeft變量,我是在已有的工程中修改的,就是為了在有些頁面不需要關閉傳此變量就OK了!。方法有點笨。大家有好方法可以提供。先多謝!


接下來就是頭疼的問題,為何要這么做:

惡補知識:1.dispatchTouchEvent 2.onInterceptTouchEvent 3.onTouchEvent 傳遞事件  直接給你們來個學習地址

http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html

除此以外看的迷迷糊糊的可以自己寫1個demo實踐1下 或多google幾個介紹看看,就是事件的傳遞,然后在dispatchTouchEvent接受1下。然后直接關閉就行。

其實也沒有甚么,幫助想要該功能的童鞋。

有甚么問題可以跟帖詢問。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 色综合免费视频 | 性欧美tubepornofree| 亚洲精品国产高清嫩草影院 | 伊人a.v在线 | 一区二区免费 | 视频一区二区在线 | 日本免费一区二区视频 | 国产日韩欧美第一页 | 久久天天躁狠狠躁夜夜2020一 | 91美女啪啪 | 波多野结衣免费视频观看 | 国产精品久久九九 | 亚洲精品国产三级在线观看 | 国产成人一区二区三区视频免费 | 欧美精品一区二区久久 | 欧美日韩亚洲国产精品 | 最近中文版字幕在线观看 | 欧美九九视频 | 小毛片网站 | 欧美a级v片不卡在线观看 | 日本特级aⅴ一级毛片 | 久久国产亚洲欧美日韩精品 | 中文字幕不卡高清免费 | 午夜 在线 | 午夜网站免费 | free hd xxxx video喷水 | 亚洲一区二区三区久久 | 97成人精品| 亚洲无线乱码高清在线观看一区 | 色黄网址| 欧美日韩一区二区亚洲 | 午夜宅男视频 | 国产欧美一区二区三区免费 | 国产香蕉97碰碰久久人人 | 国产在线观看精品一区二区三区91 | 成人自拍网站 | 亚洲欧美日韩中文综合在线不卡 | 亚洲欧美a | 国产午夜精品久久久久九九 | 久久精品无码一区二区三区 | 亚洲欧美视频在线 |