日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Android 側(cè)邊滑動關(guān)閉Activity的示例代碼

瀏覽:173日期:2022-09-24 10:59:18

0.效果圖

Android 側(cè)邊滑動關(guān)閉Activity的示例代碼

1.設(shè)置Activity樣式屬性

<style name='AppTheme' parent='Theme.AppCompat.Light.NoActionBar'> <item name='android:windowIsTranslucent'>true</item></style>

2.自定義側(cè)邊陰影視圖

class SlideBackView extends View { private Paint mBgPaint, mShadowPaint; private RectF mBgRectF, mShadowRectF; private float mRatio; private float mShadowSize; public SlideBackView(Context context) { super(context); mBgPaint = new Paint(); mBgPaint.setAntiAlias(true); mBgPaint.setColor(0xff000000); mShadowPaint = new Paint(); mShadowPaint.setAntiAlias(true); mShadowPaint.setStyle(Paint.Style.FILL); mShadowSize = dp2px(15); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mBgRectF = new RectF(); mBgRectF.top = 0; mBgRectF.left = 0; mBgRectF.bottom = MeasureSpec.getSize(heightMeasureSpec); mShadowRectF = new RectF(); mShadowRectF.top = 0; mShadowRectF.bottom = MeasureSpec.getSize(heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getMeasuredWidth(); float right = mRatio * width; mBgRectF.right = right; mBgPaint.setAlpha((int) (128 * (1 - mRatio))); canvas.drawRect(mBgRectF, mBgPaint); mShadowRectF.left = right - mShadowSize; mShadowRectF.right = right; mShadowPaint.setShader(new LinearGradient(mShadowRectF.left, 0, mShadowRectF.right, 0, 0x00000000, 0x26000000, Shader.TileMode.CLAMP)); canvas.drawRect(mShadowRectF, mShadowPaint); } public void setDistance(float ratio) { mRatio = ratio; invalidate(); } private float dp2px(float dpValue) { float density = getResources().getDisplayMetrics().density; return dpValue * density + 0.5F; } }

3.定義可滑動的Activity父類

public class SlideBaseActivity extends AppCompatActivity implements ValueAnimator.AnimatorUpdateListener { private boolean isAnimate, isSlide, isHandle; private float moveNum; private float lastX, lastY; private int lastPointerCount; private float mAnimatedValue; private ValueAnimator mValueAnimator; private SlideBackView mSlideBackView; private float mTouchSlop; private List<ShieldView> shieldViews = new ArrayList<>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); super.onCreate(savedInstanceState); initAnimator(); initSlideBackView(); mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop(); } @Override public void onAnimationUpdate(ValueAnimator animation) { mAnimatedValue = (float) animation.getAnimatedValue(); moveView(mAnimatedValue); } @Override public boolean dispatchTouchEvent(MotionEvent event) { if (!isAnimate) { float x = event.getRawX(); float y = event.getRawY(); if (event.getPointerCount() != lastPointerCount) {lastPointerCount = event.getPointerCount();lastX = x;lastY = y; } float offsetX, offsetY; switch (event.getAction()) {case MotionEvent.ACTION_MOVE: offsetX = x - lastX; offsetY = y - lastY; if (!isHandle) { float absX = Math.abs(offsetX); float absY = Math.abs(offsetY); if (absX > mTouchSlop) { if (absX * 0.5f > absY) {isSlide = true;checkSlide((int) x, (int) y); } else {isSlide = false; } isHandle = true; } } else if (isSlide) { moveNum += offsetX; if (moveNum < 0) { moveNum = 0; } moveView(moveNum); lastX = event.getX(); } break;case MotionEvent.ACTION_UP: if (isHandle) { isSlide = false; isHandle = false; isAnimate = true; int width = getWindow().getDecorView().getMeasuredWidth(); if (moveNum < width / 3f) { mValueAnimator.setFloatValues(moveNum, 0); } else { mValueAnimator.setFloatValues(moveNum, width); } mValueAnimator.start(); moveNum = 0; lastPointerCount = 0; } } } return isSlide || super.dispatchTouchEvent(event); } /** * 添加禁用滑動的子布局 */ public void addShieldView(View view) { shieldViews.add(new ShieldView(false, view)); } /** * 添加水平禁用滑動的子布局 */ public void addHorizontalShieldView(View view) { shieldViews.add(new ShieldView(true, view)); } /** * 移除禁用滑動的子布局 */ public void removeShieldView(View view) { for (ShieldView v : shieldViews) { if (v.view != null && v.view.equals(view)) {shieldViews.remove(v);break; } } } /** * 清空禁用滑動的子布局 */ public void clearShieldView() { shieldViews.clear(); } private void initAnimator() { mValueAnimator = new ValueAnimator(); mValueAnimator.setDuration(300); mValueAnimator.addUpdateListener(this); mValueAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) {isAnimate = false;if (mAnimatedValue == getWindow().getDecorView().getMeasuredWidth()) { SlideBaseActivity.super.finish(); overridePendingTransition(0, 0);} } }); } private void initSlideBackView() { mSlideBackView = new SlideBackView(this); ViewGroup decorView = (ViewGroup) getWindow().getDecorView(); decorView.addView(mSlideBackView); } private void moveView(float moveX) { ViewGroup decorView = (ViewGroup) getWindow().getDecorView(); mSlideBackView.setDistance(moveX / decorView.getMeasuredWidth()); int count = decorView.getChildCount(); for (int i = 0; i < count; i++) { View view = decorView.getChildAt(i); if (view != mSlideBackView) {view.setX(moveX); } } } private void checkSlide(int x, int y) { for (ShieldView v : shieldViews) { Rect rect = new Rect(); v.view.getGlobalVisibleRect(rect); if (rect.contains(x, y) && (!(lastX < x && !v.view.canScrollHorizontally(-1)) || (!v.isHorizontal))) {isSlide = false; } } } class ShieldView { boolean isHorizontal; View view; public ShieldView(boolean isHorizontal, View view) { this.isHorizontal = isHorizontal; this.view = view; } }}

4.使用

繼承SlideBaseActivity類,可調(diào)用addShieldView或addHorizontalShieldView方法解決事件沖突。

5.項目源碼

https://gitee.com/yugu/slide-demo

總結(jié)

到此這篇關(guān)于Android 側(cè)邊滑動關(guān)閉Activity的文章就介紹到這了,更多相關(guān)Android 側(cè)邊滑動關(guān)閉Activity內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本精品在线中文字幕| 免费在线欧美黄色| 国产一区丝袜| 久久中文欧美| 青草av.久久免费一区| 亚洲免费毛片| 一区二区三区四区日韩| 天堂av在线一区| 视频一区二区三区在线| 日韩精品一级二级| 日韩视频在线一区二区三区| 香蕉精品视频在线观看| 激情91久久| 亚洲日本三级| 国产精品一级| yellow在线观看网址| 久久中文字幕二区| 一区二区三区网站| 国产精品巨作av| 高清av不卡| 国产免费成人| 欧美日韩一区自拍| 精品一级视频| 久久精品系列| 波多视频一区| 蜜桃av一区二区三区电影| 中文亚洲免费| 视频在线在亚洲| 亚洲一二av| 天堂久久av| 国产亚洲精品美女久久| 青青青国产精品| 免费成人在线观看| 欧美日韩国产在线一区| 日韩欧美2区| 欧美日本三区| 麻豆精品视频在线观看| 精品国产亚洲日本| 蜜桃av在线播放| 久久久久国产| 免费成人网www| 老牛国产精品一区的观看方式| 视频一区二区中文字幕| 婷婷综合成人| 国产欧美一区二区三区米奇| 国产福利资源一区| 国产在线不卡一区二区三区| 欧美好骚综合网| 欧美日一区二区| 亚洲欧美日韩一区在线观看| 日本不卡视频一二三区| 国产精品亚洲片在线播放| 精品成av人一区二区三区| 97se综合| 国产精品呻吟| 婷婷成人av| 日韩精品一区二区三区中文字幕| 国产欧美欧美| 欧美www视频在线观看| 久久黄色影院| 中文字幕亚洲在线观看| 国产精品亚洲四区在线观看| av中文资源在线资源免费观看| 久久精品高清| 一区二区三区四区日韩| 国产精品主播| xxxxx性欧美特大| 日韩视频二区| 91九色精品| 在线 亚洲欧美在线综合一区| 蜜臀精品一区二区三区在线观看 | 日韩国产欧美一区二区三区| 精品中文在线| 在线亚洲激情| 欧美国产另类| 999久久久亚洲| 中文无码久久精品| 久久精品日韩欧美| 亚洲激情偷拍| 久久99蜜桃| 黄色亚洲在线| 国产视频一区二| 亚洲成a人片| 中文精品电影| 国产亚洲欧美日韩精品一区二区三区| 日韩中文影院| 亚洲免费一区三区| 97精品97| 婷婷精品在线| 久久天堂成人| 国产欧美日韩精品一区二区三区| 久久精品成人| 国产美女视频一区二区| 亚洲成av人片一区二区密柚| 日韩1区2区3区| 日韩精品91| 日韩在线成人| 久久人人99| 国产精品第一国产精品| 99精品视频精品精品视频| 日韩精品a在线观看91| 日韩激情一区| 97成人超碰| 亚洲国产综合在线看不卡| 国产激情久久| 久久性天堂网| 日韩在线观看| 国产精品一区二区av日韩在线| 欧美一区二区性| 麻豆传媒一区二区三区| 国产麻豆综合| 婷婷综合社区| 麻豆视频在线观看免费网站黄 | 久久gogo国模啪啪裸体| 夜夜精品视频| 日产午夜精品一线二线三线| 亚洲欧美网站在线观看| 亚洲一区二区毛片| 日韩一区二区在线免费| 国产精品xxx在线观看| 中文不卡在线| 一区在线免费观看| 久久久久一区| 国产一区不卡| 国产日韩视频在线| 首页国产欧美久久| 久久激情一区| 欧美国产极品| 亚洲欧美在线专区| 欧美日韩国产综合网| 中文字幕在线官网| 蜜桃久久久久| 国产精品一页| 亚洲精品视频一二三区| 国产高清久久| 136国产福利精品导航网址| 国产夫妻在线| 国产福利91精品一区二区| 久久不卡国产精品一区二区| 天堂va欧美ⅴa亚洲va一国产| 亚洲欧美日韩精品一区二区| 欧美成人亚洲| 激情视频一区二区三区| 国产一区丝袜| 日韩在线一区二区| 日韩综合小视频| 日本亚洲欧美天堂免费| 在线观看亚洲精品福利片| 视频一区二区欧美| 亚洲永久字幕| 国产农村妇女精品一二区| 欧美久久精品一级c片| 日本精品在线中文字幕| 欧美成人精品三级网站| 亚洲永久av| 久久男人av资源站| 91亚洲一区| 婷婷激情一区| 精品日产乱码久久久久久仙踪林| 国产剧情在线观看一区| 日韩国产在线观看| 日韩国产在线观看| 日本视频中文字幕一区二区三区| 日韩欧美中文字幕一区二区三区| 中文字幕日本一区| 四虎精品永久免费| 日韩福利视频网| 国产乱人伦精品一区| 国产精品地址| 91综合网人人| 久久久777| 欧美成人午夜| 日本中文字幕视频一区| 深夜福利一区| 国产精品伊人| 国产一区精品福利| 久久久国产亚洲精品| 亚洲精品1区2区| 中文字幕成人| 国产精品欧美一区二区三区不卡| 欧美a一区二区| 久久亚洲道色| 日韩av免费| 亚洲免费影视| 青草久久视频| 成人午夜网址| 亚洲最新无码中文字幕久久 | 国产欧美一区二区三区精品酒店| 久久久成人网| 亚洲影视一区| 国产精品亚洲一区二区在线观看| 国产成人精品一区二区三区在线| 亚洲啊v在线| 国产农村妇女精品一二区| 日韩精品第一| 伊伊综合在线| 五月天综合网站| 美女视频黄久久| 女人天堂亚洲aⅴ在线观看| 国产精品色网|