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

郑州网站开发汉狮营销策划案例

郑州网站开发汉狮,营销策划案例,找人做网站需要注意问题,搜索引擎不友好的网站特征最近在做一个屏保功能#xff0c;需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的#xff0c;内部是一个viewpager 做这个效果的时候#xff0c;关键就是要注意外层拦截触摸事件时#xff0c;需要有条件的拦截#xff0c;不能影响到内部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://www.hkea.cn/news/14544229/

相关文章:

  • wordpress的cms主题给网站做seo诊断
  • 可以直接进入网站的正能量网站西安企业建站价格
  • 苏州高端网站设计安全网站建设与服务的关系
  • 成华区微信网站建设软件开发工作岗位
  • 手机网站制作建设wordpress 全文搜索
  • 大气婚庆网站源码python开源网站源码
  • 网站建设方任务 职责网站建设优化文档
  • 有没有专门做毕业设计的网站凡科做的网站能被收录吗
  • 做文案策划需要用到的网站强大的wordpress主题
  • wordpress编辑器未知错误5.2windows优化大师收费吗
  • 传媒网站给行业做宣传国家高新技术企业难吗
  • 做的很好的网站网站建设策划书结束语
  • 深圳自助建站系统wordpress用那个采集器
  • 学校网站建设经验介绍wordpress 读者墙不显示头像
  • 河南网站设计公司价格内江做网站哪里便宜
  • 自己怎么做新闻开头视频网站河南新蔡有做网站建设的吗
  • 品牌网站建设小蝌蚪2a做音乐网站要注意什么
  • 仿网站源码哪个网站有做视频转场的素材
  • 自建企业网站教程官网设计比较好看的网站
  • 网站建设后帐号密码制作网页模板课件
  • 精美图表网站推荐食品建设网站前的市场分析
  • 网站后台如何修改密码动画视频模板网站
  • 平邑建设局网站首页万网登录
  • 中国最近热点新闻事件高级seo
  • 毕节市城乡建设局网站网店美工的作用
  • 昆山专业做网站seo网站建设课程
  • 网站建设交什么税什邡网站建设公司
  • 选一个网站做seo做网站要不要钱
  • seo网站推广简历拼多多网店注册
  • 彩票开奖网站开发企业网站制作设计