日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

Android 向右滑動關閉頁面

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

前言:

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

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下。然后直接關閉就行。

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

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


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩免费福利视频 | 激情婷婷丁香 | 91欧美精品成人综合在线观看 | 国产精品视频专区 | 在线一级视频 | 欧美午夜精品一区二区蜜桃 | 亚洲一区自拍偷拍 | 国产精品久久久久久久美男 | 黄色电影在线免费看 | 亚洲欧洲精品成人久久曰影片 | 一区精品视频 | 最新中文字幕在线 | 成人免费视频一区二区 | 久久91 | 亚洲综合色在线 | 黄网站在线观看 | 精品福利在线观看 | 五月婷婷之婷婷 | 久久久精品一区二区 | 国产精品爱啪在线线免费观看 | 午夜精品久久久久久久爽 | 国产欧美日本在线 | 欧美精品一区二区三区视频 | 亚洲综合区 | 成人免费在线观看 | 黄色在线观看网址 | 国产va在线观看 | 色噜噜精品| 久久精品一区二区国产 | 欧美日韩另类一区 | 成人网在线观看 | 国产精品日韩欧美 | 伊人99综合 | 欧美一区二区网站 | 污黄网站在线观看 | 3p视频在线播放 | 国产精品爱久久久久久久 | 黄色一级大片在线免费看产 | 国产激情精品一区二区三区 | 玖玖色在线 | 免费的a级片 |