亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Android實現(xiàn)左滑退出Activity的完美封裝

瀏覽:23日期:2022-09-21 13:30:45

1:定義一個自己的父級容器,讓它繼承自一個布局(LinearLayout、RelativeLayout都可以)

public class SildingFinishLayout extends RelativeLayout implements View.OnTouchListener { /** * SildingFinishLayout布局的父布局 */ private ViewGroup mParentView; /** * 處理滑動邏輯的View */ private View touchView; /** * 滑動的最小距離 */ private int mTouchSlop; /** * 按下點的X坐標(biāo) */ private int downX; /** * 按下點的Y坐標(biāo) */ private int downY; /** * 臨時存儲X坐標(biāo) */ private int tempX; /** * 滑動類 */ private Scroller mScroller; /** * SildingFinishLayout的寬度 */ private int viewWidth; /** * 記錄是否正在滑動 */ private boolean isSilding; private OnSildingFinishListener onSildingFinishListener; private boolean isFinish; public SildingFinishLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SildingFinishLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); mScroller = new Scroller(context); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (changed) {// 獲取SildingFinishLayout所在布局的父布局 mParentView = (ViewGroup) this.getParent(); viewWidth = this.getWidth(); } } /** * 設(shè)置OnSildingFinishListener, 在onSildingFinish()方法中finish Activity * * @param onSildingFinishListener */ public void setOnSildingFinishListener( OnSildingFinishListener onSildingFinishListener) { this.onSildingFinishListener = onSildingFinishListener; } /** * 設(shè)置Touch的View * * @param touchView */ public void setTouchView(View touchView) { this.touchView = touchView; touchView.setOnTouchListener(this); } public View getTouchView() { return touchView; } /** * 滾動出界面 */ private void scrollRight() { final int delta = (viewWidth + mParentView.getScrollX());// 調(diào)用startScroll方法來設(shè)置一些滾動的參數(shù),我們在computeScroll()方法中調(diào)用scrollTo來滾動item mScroller.startScroll(mParentView.getScrollX(), 0, -delta + 1, 0,Math.abs(delta)); postInvalidate(); } /** * 滾動到起始位置 */ private void scrollOrigin() { int delta = mParentView.getScrollX(); mScroller.startScroll(mParentView.getScrollX(), 0, -delta, 0,Math.abs(delta)); postInvalidate(); } /** * touch的View是否是AbsListView, 例如ListView, GridView等其子類 * * @return */ private boolean isTouchOnAbsListView() { return touchView instanceof AbsListView ? true : false; } /** * touch的view是否是ScrollView或者其子類 * * @return */ private boolean isTouchOnScrollView() { return touchView instanceof ScrollView ? true : false; } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN:downX = tempX = (int) event.getRawX();downY = (int) event.getRawY();break; case MotionEvent.ACTION_MOVE:int moveX = (int) event.getRawX();int deltaX = tempX - moveX;tempX = moveX;if (Math.abs(moveX - downX) > mTouchSlop && Math.abs((int) event.getRawY() - downY) < mTouchSlop) { isSilding = true;// 若touchView是AbsListView,// 則當(dāng)手指滑動,取消item的點擊事件,不然我們滑動也伴隨著item點擊事件的發(fā)生 if (isTouchOnAbsListView()) { MotionEvent cancelEvent = MotionEvent.obtain(event); cancelEvent.setAction(MotionEvent.ACTION_CANCEL | (event.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT)); v.onTouchEvent(cancelEvent); }}if (moveX - downX >= 0 && isSilding) { mParentView.scrollBy(deltaX, 0);// 屏蔽在滑動過程中ListView ScrollView等自己的滑動事件 if (isTouchOnScrollView() || isTouchOnAbsListView()) { return true; }}break; case MotionEvent.ACTION_UP:isSilding = false;if (mParentView.getScrollX() <= -viewWidth / 2) { isFinish = true; scrollRight();} else { scrollOrigin(); isFinish = false;}break; }// 假如touch的view是AbsListView或者ScrollView 我們處理完上面自己的邏輯之后// 再交給AbsListView, ScrollView自己處理其自己的邏輯 if (isTouchOnScrollView() || isTouchOnAbsListView()) { return v.onTouchEvent(event); }// 其他的情況直接返回true return true; } @Override public void computeScroll() {// 調(diào)用startScroll的時候scroller.computeScrollOffset()返回true, if (mScroller.computeScrollOffset()) { mParentView.scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); postInvalidate(); if (mScroller.isFinished()) {if (onSildingFinishListener != null && isFinish) { onSildingFinishListener.onSildingFinish();} } } } public interface OnSildingFinishListener { public void onSildingFinish(); }}

2.Acitity

在Activity的onCreate()方法里面

@Override public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); SildingFinishLayout mSildingFinishLayout = (SildingFinishLayout) findViewById(R.id.timed_task_SildingFinishLayout);mSildingFinishLayout mSildingFinishLayout .setOnSildingFinishListener(new SildingFinishLayout.OnSildingFinishListener() { @Override public void onSildingFinish() {finish(); } }); mSildingFinishLayout .setTouchView(mSildingFinishLayout);//綁定底層的布局就可以了 :不起作用的話換個你activity 布局里面view就可以啦 }

截止目前,這個功能已經(jīng)實現(xiàn)了

解決問題:這個會出現(xiàn)左滑 背景白色問題

1.style.xml中中增加

<style name='AppTheme' parent='android:Theme.Light'> <item name='android:windowIsTranslucent'>true</item> <item name='android:windowNoTitle'>true</item> <item name='android:windowBackground'>@android:color/transparent</item></style>

2 acvitiy 的屬性中加上

android:theme='@style/AppTheme'

3 一些屬性的詳解

<item name='android:windowFrame'>@null</item> :Dialog的windowFrame框為無<item name='android:windowIsFloating'>true</item>:是否浮現(xiàn)在activity之上<item name='android:windowIsTranslucent'>false</item>:是否半透明<item name='android:windowNoTitle'>true</item>:是否顯示title<item name='android:windowBackground'>@drawable/dia_bg</item>:設(shè)置dialog的背景<item name='android:backgroundDimEnabled'>false</item>: 背景是否透明顯示

到此這篇關(guān)于Android實現(xiàn)左滑退出Activity的完美封裝的文章就介紹到這了,更多相關(guān)Android 左滑退出Activity內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 宅宅午夜亚洲精品 | 在线看国产视频 | 免费看片子 | 免费观看很黄很色的大片 | 国产美女福利在线 | 日本高清视频www夜色资源网 | 婷婷亚洲久悠悠色在线播放 | 亚洲欧洲日产国码天堂 | 国产免费一区二区三区最新 | 欧美一级片黄色 | 欧美午夜免费一级毛片 | 午夜精品久久久久久久久 | 欧美三级在线播放 | 国产欧美综合一区二区 | 久久亚洲综合中文字幕 | 亚洲一级理论片 | 日韩欧美亚洲综合久久99e | 国产精品免费αv视频 | 国产日韩精品在线 | 亚洲妇熟xxxxx妇色黄 | 中文字幕日韩在线一区国内 | 日韩手机看片福利精品 | 国产一区二区三区四区五区六区 | 日本黄色片在线免费观看 | 午夜香蕉视频 | 国产精品永久免费视频观看 | 谁有毛片网址 | 中国日本欧美韩国18 | 高h喷水荡肉爽文np肉色文 | 黄色激情网址 | 高清一区二区三区视频 | 黄色美女在线观看 | 久久精品国产99国产精品澳门 | 亚洲成人黄色网 | 久久精品免费全国观看国产 | 国产精品久久久久久久久电影网 | 亚洲免费久久 | 国产欧美亚洲精品第3页在线 | 日韩v片| 日韩欧美一区二区精品久久 | 91亚洲综合|