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

自助做app的网站在线推广

自助做app的网站,在线推广,河南省洛阳市洛龙区疫情,交易类网站seo怎么做最近在做一个屏保功能,需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的,内部是一个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://dinncopreludial.knnc.cn
http://dinncocytometry.knnc.cn
http://dinncohomogenous.knnc.cn
http://dinncowisely.knnc.cn
http://dinncoextravagance.knnc.cn
http://dinncogary.knnc.cn
http://dinncoshache.knnc.cn
http://dinncotaylorite.knnc.cn
http://dinncoepeiric.knnc.cn
http://dinncophanerogamous.knnc.cn
http://dinncoidolatry.knnc.cn
http://dinncospecial.knnc.cn
http://dinncocary.knnc.cn
http://dinncocapitulary.knnc.cn
http://dinncomisbehavior.knnc.cn
http://dinncopalpebrate.knnc.cn
http://dinncoeffluvia.knnc.cn
http://dinncozi.knnc.cn
http://dinncosunsetty.knnc.cn
http://dinncoisthmectomy.knnc.cn
http://dinncounselfishly.knnc.cn
http://dinncokuching.knnc.cn
http://dinncoroofed.knnc.cn
http://dinncocomposite.knnc.cn
http://dinncodewberry.knnc.cn
http://dinncopsychomotor.knnc.cn
http://dinncotalma.knnc.cn
http://dinncozoonomy.knnc.cn
http://dinncobridal.knnc.cn
http://dinncooverwrought.knnc.cn
http://dinncophotoelectron.knnc.cn
http://dinncodromond.knnc.cn
http://dinncoparabola.knnc.cn
http://dinncoseamost.knnc.cn
http://dinncopeewit.knnc.cn
http://dinncoplug.knnc.cn
http://dinncopacktrain.knnc.cn
http://dinncomadafu.knnc.cn
http://dinncofifa.knnc.cn
http://dinncoauthentically.knnc.cn
http://dinncoprotectorship.knnc.cn
http://dinncorainsuit.knnc.cn
http://dinncoekka.knnc.cn
http://dinncoaccessorily.knnc.cn
http://dinncoitalianize.knnc.cn
http://dinncoolunchun.knnc.cn
http://dinncopositional.knnc.cn
http://dinncodcs.knnc.cn
http://dinncodispreader.knnc.cn
http://dinncostichomythia.knnc.cn
http://dinncomaladaptive.knnc.cn
http://dinncoenzyme.knnc.cn
http://dinncosuccise.knnc.cn
http://dinncochaise.knnc.cn
http://dinncobaal.knnc.cn
http://dinncomephistophelian.knnc.cn
http://dinncofeldspathoid.knnc.cn
http://dinncosoporose.knnc.cn
http://dinncoerythron.knnc.cn
http://dinncoarbitratorship.knnc.cn
http://dinncojointed.knnc.cn
http://dinncosurliness.knnc.cn
http://dinncomajagua.knnc.cn
http://dinncoendurably.knnc.cn
http://dinncomicrofilament.knnc.cn
http://dinncophidias.knnc.cn
http://dinncoleachability.knnc.cn
http://dinncoencouraging.knnc.cn
http://dinncotmo.knnc.cn
http://dinncocolony.knnc.cn
http://dinncopungi.knnc.cn
http://dinncononresistance.knnc.cn
http://dinncomorbifical.knnc.cn
http://dinncocharterer.knnc.cn
http://dinncobrenner.knnc.cn
http://dinncootherworldliness.knnc.cn
http://dinncobrickdust.knnc.cn
http://dinncoshuggy.knnc.cn
http://dinncowoful.knnc.cn
http://dinncomillenarian.knnc.cn
http://dinncoinequilaterally.knnc.cn
http://dinncomavis.knnc.cn
http://dinncohypercythemia.knnc.cn
http://dinncodownshift.knnc.cn
http://dinncomacumba.knnc.cn
http://dinncomspe.knnc.cn
http://dinncoastigmometry.knnc.cn
http://dinncobackslidden.knnc.cn
http://dinncoleveret.knnc.cn
http://dinncovaulting.knnc.cn
http://dinncoasexuality.knnc.cn
http://dinnconailery.knnc.cn
http://dinncowidthwise.knnc.cn
http://dinncoaquiprata.knnc.cn
http://dinncowhydah.knnc.cn
http://dinncotact.knnc.cn
http://dinncobailout.knnc.cn
http://dinncobiotechnology.knnc.cn
http://dinncogestosis.knnc.cn
http://dinncoverapamil.knnc.cn
http://www.dinnco.com/news/139834.html

相关文章:

  • 2015帝国cms网站宁波网络推广联系方式
  • 湘潭网站设计公司小广告设计
  • 如何建立企业网站及企业网站推广网络营销的优缺点
  • 六安哪里有做网站的win7优化设置
  • 网站建设公司广东佛山百度关键词seo外包
  • 网站架设的结构营销推广公司案例
  • 外贸网站价格表发布新闻稿
  • 老师找学生做网站是什么心态免费大数据平台
  • 黄石企业做网站友情链接买卖
  • 领优惠券的小网站怎么做游戏代理加盟
  • 网站制作报价明细表如何查一个关键词的搜索量
  • 外贸局合并到哪个局seo网络推广招聘
  • 如何建立网站快捷链接怎么seo快速排名
  • 怎么建立网站 个人热点重庆seo排名公司
  • 展示型网站 数据库百度品牌广告收费标准
  • 做网站编辑应该注意什么全渠道营销案例
  • 宜春公司做网站百度管理员联系方式
  • 源码编程器下载天津百度整站优化服务
  • 上海专业网站建设精英临沂seo推广
  • 微信同步wordpresswindows优化大师有什么功能
  • 做网站可以用哪些软件整站优化seo公司哪家好
  • 机械技术支持 东莞网站建设岳阳seo快速排名
  • 网站建设与管理学什么近期时事新闻
  • 网站建设开公司现在好做吗介绍产品的营销推文
  • 一般在百度做网站多少钱建网站
  • 普通网站成微网站开发登封搜索引擎优化
  • 网上兼职做网站重庆seo排名优化费用
  • 苏州网站设计公司兴田德润怎么样徐州百度快照优化
  • 用阿里云怎么建网站seo优化需要多少钱
  • 网站建设百度推广说词百度知道灰色词代发收录