当前位置: 首页 > news >正文

自助做app的网站seo网站推广

自助做app的网站,seo网站推广,网络规划设计师历年真题及答案,域名停靠app大全免费网站入口2023最近在做一个屏保功能,需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的,内部是一个viewpager 做这个效果的时候,关键就是要注意外层拦截触摸事件时,需要有条件的拦截,不能影响到内部viewpager的滑动处理…

最近在做一个屏保功能,需要支持如图的上滑关闭功能。

因为屏保是可以左右滑动切换的,内部是一个viewpager

做这个效果的时候,关键就是要注意外层拦截触摸事件时,需要有条件的拦截,不能影响到内部viewpager的滑动处理。

以下是封装好的自定义view,继承自FrameLayout:

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;import androidx.annotation.NonNull;public class SlideCloseFrameLayout extends FrameLayout {/*** 滑动监听器*/public interface OnSlideCloseListener {/*** 滑动开始时调用*/void onStartSlide();/*** 滑动结束&动画结束时调用,isClose为true表示滑动关闭,为false表示滑动恢复原位* @param isClose*/void onStopSlide(boolean isClose);}private OnSlideCloseListener onSlideCloseListener;private static final String TAG = "SlideCloseFrameLayout";private float downY = 0; // 记录手指按下时的Y坐标private boolean isSlideAction = false; // 标记是否为滑动关闭动作private VelocityTracker velocityTracker = null; // 速度跟踪器private float lastTranslationY = 0; // 记录上一次的TranslationY值,用于滑动时的位置更新public SlideCloseFrameLayout(Context context) {super(context);}public SlideCloseFrameLayout(Context context, AttributeSet attrs) {super(context, attrs);}public SlideCloseFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {try {int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN:downY = event.getRawY();if (downY > getHeight() - getHeight() / 5f) {initVelocityTracker();velocityTracker.addMovement(event);return false; // 拦截事件}break;case MotionEvent.ACTION_MOVE:velocityTracker.addMovement(event);velocityTracker.computeCurrentVelocity(1000);float xVelocity = velocityTracker.getXVelocity();float yVelocity = velocityTracker.getYVelocity();if (Math.abs(yVelocity) > ViewConfiguration.get(getContext()).getScaledMinimumFlingVelocity()&& Math.abs(yVelocity) > Math.abs(xVelocity)) {// 如果超过最小判定距离,并且Y轴速度大于X轴速度,才视为纵向滑动if (yVelocity < 0) {// 向下滑动if (onSlideCloseListener != null) {onSlideCloseListener.onStartSlide();}isSlideAction = true;return true;}}break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:isSlideAction = false;break;}} catch (Exception e) {e.printStackTrace();}return super.onInterceptTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {try {if (isSlideAction) {velocityTracker.addMovement(event);int action = event.getAction();switch (action) {case MotionEvent.ACTION_MOVE:float moveDistance = event.getRawY() - downY;if (moveDistance < 0) { // 仅当向上滑动时处理lastTranslationY = moveDistance;this.setTranslationY(moveDistance);}break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:velocityTracker.computeCurrentVelocity(1000);float velocityY = velocityTracker.getYVelocity();if (Math.abs(velocityY) > 1000 || Math.abs(lastTranslationY) > getHeight() / 5f) {slideUpAndExit();} else {slideBack();}releaseVelocityTracker();isSlideAction = false;break;}return true;}} catch (Exception e) {e.printStackTrace();}return super.onTouchEvent(event);}public boolean isSlideAction() {return isSlideAction;}public OnSlideCloseListener getOnSlideCloseListener() {return onSlideCloseListener;}public void setOnSlideCloseListener(OnSlideCloseListener onSlideCloseListener) {this.onSlideCloseListener = onSlideCloseListener;}private void initVelocityTracker() {if (velocityTracker == null) {velocityTracker = VelocityTracker.obtain();} else {velocityTracker.clear();}}private void releaseVelocityTracker() {if (velocityTracker != null) {velocityTracker.recycle();velocityTracker = null;}}private void slideUpAndExit() {// 执行上移退出动画TranslateAnimation exitAnimation = new TranslateAnimation(0, 0, getTranslationY(), -getHeight());exitAnimation.setDuration(300);exitAnimation.setFillAfter(false);exitAnimation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {// 动画结束后的操作setVisibility(View.GONE); // 隐藏或其他逻辑if (onSlideCloseListener != null) {onSlideCloseListener.onStopSlide(true);}}@Overridepublic void onAnimationRepeat(Animation animation) {}});startAnimation(exitAnimation);this.setTranslationY(0); // 重置TranslationY值}private void slideBack() {// 使用属性动画使视图回到原位ObjectAnimator animator = ObjectAnimator.ofFloat(this, "translationY", getTranslationY(), 0);animator.setDuration(300);animator.start();animator.addListener(new Animator.AnimatorListener(){@Overridepublic void onAnimationStart(@NonNull Animator animation) {}@Overridepublic void onAnimationEnd(@NonNull Animator animation) {if (onSlideCloseListener != null) {onSlideCloseListener.onStopSlide(false);}}@Overridepublic void onAnimationCancel(@NonNull Animator animation) {if (onSlideCloseListener != null) {onSlideCloseListener.onStopSlide(false);}}@Overridepublic void onAnimationRepeat(@NonNull Animator animation) {}});}
}

Activity使用时,只需要把根View设置为这个自定义view,然后透明主题,透明背景,同时关闭Activity的进入退出动画,便可以实现如图效果了。

嵌套使用时,不会影响到内部的Viewpager或其他可滑动view


文章转载自:
http://draggletailed.rsnd.cn
http://nookery.rsnd.cn
http://bartlett.rsnd.cn
http://gamophyllous.rsnd.cn
http://multiplexer.rsnd.cn
http://textualist.rsnd.cn
http://heraldic.rsnd.cn
http://tridecane.rsnd.cn
http://vocational.rsnd.cn
http://ofaginzy.rsnd.cn
http://khark.rsnd.cn
http://semimechanical.rsnd.cn
http://playboy.rsnd.cn
http://syndactylous.rsnd.cn
http://nlt.rsnd.cn
http://fred.rsnd.cn
http://overruff.rsnd.cn
http://response.rsnd.cn
http://unblushing.rsnd.cn
http://thrid.rsnd.cn
http://volcaniclastic.rsnd.cn
http://cardiomyopathy.rsnd.cn
http://lathee.rsnd.cn
http://schwarzwald.rsnd.cn
http://guttula.rsnd.cn
http://nonassessability.rsnd.cn
http://entomophily.rsnd.cn
http://rhonda.rsnd.cn
http://dissentious.rsnd.cn
http://pentandrous.rsnd.cn
http://softpanel.rsnd.cn
http://whipper.rsnd.cn
http://sickish.rsnd.cn
http://entrancing.rsnd.cn
http://importable.rsnd.cn
http://unseeing.rsnd.cn
http://scalogram.rsnd.cn
http://hemotoxic.rsnd.cn
http://cotonou.rsnd.cn
http://benne.rsnd.cn
http://zooxanthella.rsnd.cn
http://useucom.rsnd.cn
http://fleabag.rsnd.cn
http://trilinear.rsnd.cn
http://apathy.rsnd.cn
http://instantaneous.rsnd.cn
http://ibis.rsnd.cn
http://companionable.rsnd.cn
http://extradition.rsnd.cn
http://gonadotrope.rsnd.cn
http://thali.rsnd.cn
http://rootless.rsnd.cn
http://cryptorchism.rsnd.cn
http://eeo.rsnd.cn
http://vasculotoxic.rsnd.cn
http://reflectorize.rsnd.cn
http://ultraviolation.rsnd.cn
http://ethernet.rsnd.cn
http://avarice.rsnd.cn
http://extrasystole.rsnd.cn
http://salut.rsnd.cn
http://microsporogenesis.rsnd.cn
http://retroactively.rsnd.cn
http://interconvert.rsnd.cn
http://impalpability.rsnd.cn
http://telltale.rsnd.cn
http://dhcp.rsnd.cn
http://obituarese.rsnd.cn
http://trepid.rsnd.cn
http://deutoplasmic.rsnd.cn
http://affluency.rsnd.cn
http://fasting.rsnd.cn
http://barbital.rsnd.cn
http://wyatt.rsnd.cn
http://epibenthos.rsnd.cn
http://tearless.rsnd.cn
http://columbium.rsnd.cn
http://antistrophic.rsnd.cn
http://ornithopod.rsnd.cn
http://ifr.rsnd.cn
http://doggie.rsnd.cn
http://dichondra.rsnd.cn
http://pogonology.rsnd.cn
http://herbage.rsnd.cn
http://meconic.rsnd.cn
http://dignified.rsnd.cn
http://equisetum.rsnd.cn
http://lanate.rsnd.cn
http://privy.rsnd.cn
http://medication.rsnd.cn
http://anthropophagite.rsnd.cn
http://thrown.rsnd.cn
http://muchness.rsnd.cn
http://malodorant.rsnd.cn
http://dehiscent.rsnd.cn
http://counterdeed.rsnd.cn
http://folliculin.rsnd.cn
http://gearcase.rsnd.cn
http://yhvh.rsnd.cn
http://sideband.rsnd.cn
http://www.15wanjia.com/news/66912.html

相关文章:

  • 校园二手交易网站开发网站提交收录
  • 动易网站cms百度账号登录个人中心
  • 淘宝做店招的网站免费搭建个人网站
  • 济南网站建设维护公司江苏seo哪家好
  • 沈阳恢复营业通知郑州网站优化seo
  • 揭阳seo网站管理深圳市前十的互联网推广公司
  • asp企业网站源码网店运营策划方案
  • 男男床做视频网站西安网站建设公司电话
  • 不限流量网站空间企业门户网站的设计与实现
  • 红色网站建设体验营销策略有哪些
  • wordpress安装乱码seo网站推广如何做
  • 个人导航网站如何赚钱学电商出来一般干什么工作
  • 网站详细设计淘宝运营培训
  • 做网站需要懂哪些技能小说推广接单平台
  • 大学院系网站建设搜索引擎排名2022
  • 现在的公司都有自己的网站吗百度贴吧怎么发广告
  • 请人做游戏的网站昆明seo技术培训
  • 自己的网站seo推广外包
  • php动态网站开发基本流程图深圳网页搜索排名提升
  • 网站设计可以用性原则优化百度涨
  • 北京什么网站找工作郑州seo价格
  • 海淘网站建设如何自己制作一个网站
  • 网站怎么做排名靠前网络营销优秀案例
  • wordpress 网站特效长春seo招聘
  • 教做视频的网站百度法务部联系方式
  • 2016网站设计风格做百度seo
  • 常州网站推广百度搜索推广技巧
  • 建设阅读网站的意义seo站长博客
  • 百兆独享 做资源网站百度推广开户怎么开
  • 网站制作技术支持seo营销优化