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

网站开发需要什么文凭织梦模板网站源码下载

网站开发需要什么文凭,织梦模板网站源码下载,如何在百度上搜索到自己的网站,百度排名查询最近在做一个屏保功能,需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的,内部是一个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://www.yayakq.cn/news/562738/

相关文章:

  • 哪些网站用python做的wordpress安装页面
  • 网站网络推广公司google官网入口注册
  • 什么颜色做网站显的大气怀宁做网站
  • 公司网站建设前期方案猪八戒网做动漫弹幕网站
  • 网站短期技能培训公司网站建设意见征集
  • 做网站需要网站负责人大淘客cms网站怎么做
  • 网站备案信息修改淘宝api 做网站
  • 做网站 哪里发布然后建设自营网站
  • 网站用的字体建设工程合同与承揽合同的区别
  • 网站建设与维护百科百度怎么自己做网站
  • 宁夏住房和建设厅官方网站wordpress不备案
  • 无锡知名网站制作利津网站建设
  • wordpress修改没站内优化seo
  • 用php做的网站怎么上传微信分身网页版网址
  • 一级建造师找工作网站图书馆管理网站建设logo
  • 网站推广朋友圈文案wordpress安卓下载
  • 建设网站ppt开发出来的电子商务网站域名
  • 滦平县建设局网站东莞市专注网站建设
  • 2019深圳网站设计公司排名视觉传达设计公司排名前十强
  • 喀什建设局网站今天重大新闻50字
  • 机关门户网站 建设 方案长春建设招标网
  • 网站群方案做搜索的网站有哪些
  • 网站的建设模式自己做商品网站怎么做
  • 企业综合型网站建设方案动漫制作专业需要买电脑吗
  • 中文网站建设中模板下载seo接单一个月能赚多少钱
  • 做网站你给推广石家庄专业制作网站
  • 西安新能源网站建设少儿类网站怎么做
  • 广州网站建设代理做个小程序店铺多少钱
  • 河南网站排名优化山西公司网站开发
  • 网站建设及经营应解决好的问题重庆南川网站制作公司电话