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

大淘客网站怎么做推广黄冈软件必备软件

大淘客网站怎么做,推广黄冈软件必备软件,wordpress网站维护插件,嘉兴信息网站之前在实现控件阴影时有提到过#xff0c;阴影效果的实现采用的是Android原生的View的属性#xff0c;拔高Z轴。Z轴会让View产生阴影的效果。 Zelevation translationZ 拔高Z轴可以通过控制elevation和translationZ。 我们之前是通过elevation来单纯的控制Z轴#xff1b;而…之前在实现控件阴影时有提到过阴影效果的实现采用的是Android原生的View的属性拔高Z轴。Z轴会让View产生阴影的效果。 Zelevation translationZ 拔高Z轴可以通过控制elevation和translationZ。 我们之前是通过elevation来单纯的控制Z轴而translateZ除了控制Z轴还可以用来控制动画效果比如我们点击按钮时希望它有一个弹起的效果就是借助这个属性来实现。 StateAnimatorView接口 创建一个通用接口 public interface StateAnimatorView {void setStateAnimator(StateAnimator stateAnimator);StateAnimator getStateAnimator(); }实现接口 ShapeButton 实现 StateAnimatorView接口 // -------------------------------// stateAnimator// -------------------------------private StateAnimator stateAnimator new StateAnimator(this);Overridepublic void setStateAnimator(StateAnimator stateAnimator) {this.stateAnimator stateAnimator;}Overridepublic StateAnimator getStateAnimator() {return stateAnimator;}StateAnimator StateAnimator是一个管理View状态和相关Animator的类 public class StateAnimator {private final ArrayListTuple mTuples new ArrayList();private Tuple lastMatch null;private Animator runningAnimation null;private WeakReferenceView viewRef;public StateAnimator(View target) {setTarget(target);}private Animator.AnimatorListener mAnimationListener new Animator.AnimatorListener() {Overridepublic void onAnimationStart(Animator animation) {}Overridepublic void onAnimationEnd(Animator animation) {if (runningAnimation animation) {runningAnimation null;}}Overridepublic void onAnimationCancel(Animator animation) {}Overridepublic void onAnimationRepeat(Animator animation) {}};/*** Associates the given Animation with the provided drawable state specs so that it will be run* when the Views drawable state matches the specs.** param specs drawable state specs to match against* param animation The Animation to run when the specs match*/public void addState(int[] specs, Animator animation, Animator.AnimatorListener listener) {Tuple tuple new Tuple(specs, animation, listener);animation.addListener(mAnimationListener);mTuples.add(tuple);}/*** Returns the current {link Animation} which is started because of a state change.** return The currently running Animation or null if no Animation is running*/Animator getRunningAnimation() {return runningAnimation;}View getTarget() {return viewRef null ? null : viewRef.get();}void setTarget(View view) {final View current getTarget();if (current view) {return;}if (current ! null) {clearTarget();}if (view ! null) {viewRef new WeakReference(view);}}private void clearTarget() {viewRef null;lastMatch null;runningAnimation null;}/*** Called by View*/public void setState(int[] state) {Tuple match null;final int count mTuples.size();for (int i 0; i count; i) {final Tuple tuple mTuples.get(i);if (StateSet.stateSetMatches(tuple.mSpecs, state)) {match tuple;break;}}if (match lastMatch) {return;}if (lastMatch ! null) {cancel();}lastMatch match;View view (View) viewRef.get();if (match ! null view ! null view.getVisibility() View.VISIBLE) {start(match);}}private void start(Tuple match) {match.getListener().onAnimationStart(match.animation);runningAnimation match.animation;runningAnimation.start();}private void cancel() {if (runningAnimation ! null runningAnimation.isRunning()) {runningAnimation.cancel();runningAnimation null;}}/*** hide*/ArrayListTuple getTuples() {return mTuples;}static class Tuple {final int[] mSpecs;final Animator animation;private Animator.AnimatorListener listener;private Tuple(int[] specs, Animator Animation, Animator.AnimatorListener listener) {mSpecs specs;animation Animation;this.listener listener;}int[] getSpecs() {return mSpecs;}Animator getAnimation() {return animation;}public Animator.AnimatorListener getListener() {return listener;}}} 在初始化阴影属性的地方初始化StateAnimation: public static void initElevation(ShadowView view, TypedArray a, int[] ids) {int carbon_elevation ids[0];int carbon_shadowColor ids[1];int carbon_ambientShadowColor ids[2];int carbon_spotShadowColor ids[3];float elevation a.getDimension(carbon_elevation, 0);view.setElevation(elevation);// 初始化StateAnimationif (elevation 0)AnimUtils.setupElevationAnimator(((StateAnimatorView) view).getStateAnimator(), view);ColorStateList shadowColor a.getColorStateList(carbon_shadowColor);view.setElevationShadowColor(shadowColor ! null ? shadowColor.withAlpha(255) : null);if (a.hasValue(carbon_ambientShadowColor)) {ColorStateList ambientShadowColor a.getColorStateList(carbon_ambientShadowColor);view.setOutlineAmbientShadowColor(ambientShadowColor ! null ? ambientShadowColor.withAlpha(255) : null);}if (a.hasValue(carbon_spotShadowColor)) {ColorStateList spotShadowColor a.getColorStateList(carbon_spotShadowColor);view.setOutlineSpotShadowColor(spotShadowColor ! null ? spotShadowColor.withAlpha(255) : null);}}按下按钮和松开按钮的状态和动画是一一对应的 public static void setupElevationAnimator(StateAnimator stateAnimator, final ShadowView view) {// 按下时的状态和动画{final ValueAnimator animator ValueAnimator.ofFloat(0, 0);animator.setDuration(SHORT_ANIMATION_DURATION);animator.setInterpolator(new FastOutSlowInInterpolator());Animator.AnimatorListener animatorListener new AnimatorListenerAdapter() {Overridepublic void onAnimationStart(Animator animation) {float elevationOrTranslationZ getElevationOrTranslationZ(view);animator.setFloatValues(0, elevationOrTranslationZ);}};animator.addUpdateListener(animation - view.setTranslationZ((Float) animation.getAnimatedValue()));stateAnimator.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, animator, animatorListener);}// 松开时的状态和动画{final ValueAnimator animator ValueAnimator.ofFloat(0, 0);animator.setDuration(SHORT_ANIMATION_DURATION);animator.setInterpolator(new FastOutSlowInInterpolator());Animator.AnimatorListener animatorListener new AnimatorListenerAdapter() {Overridepublic void onAnimationStart(Animator animation) {float elevationOrTranslationZ getElevationOrTranslationZ(view);animator.setFloatValues(elevationOrTranslationZ, 0);}};animator.addUpdateListener(animation - view.setTranslationZ((Float) animation.getAnimatedValue()));stateAnimator.addState(new int[]{-android.R.attr.state_pressed, android.R.attr.state_enabled}, animator, animatorListener);}// 松开时的状态和动画{final ValueAnimator animator ValueAnimator.ofFloat(0, 0);animator.setDuration(SHORT_ANIMATION_DURATION);animator.setInterpolator(new FastOutSlowInInterpolator());Animator.AnimatorListener animatorListener new AnimatorListenerAdapter() {Overridepublic void onAnimationStart(Animator animation) {animator.setFloatValues(view.getElevation(), 0);}};animator.addUpdateListener(animation - view.setTranslationZ((Float) animation.getAnimatedValue()));stateAnimator.addState(new int[]{android.R.attr.state_enabled}, animator, animatorListener);}}开始动画 在按下或松开按钮时会回调按钮的drawableStateChanged(): Overrideprotected void drawableStateChanged() {super.drawableStateChanged();if (rippleDrawable ! null rippleDrawable.getStyle() ! RippleDrawable.Style.Background)rippleDrawable.setState(getDrawableState());if (stateAnimator ! null)// 这个方法会执行与状态相对应的动画stateAnimator.setState(getDrawableState());}完整代码可查看 ShapeButton部分
http://www.w-s-a.com/news/923776/

相关文章:

  • 怀化建设企业网站太原网站关键词排名
  • 空间注册网站网站制作是怎么做的
  • 数码家电商城网站源码一个网站的成本
  • 网站伪静态是什么意思麻涌东莞网站建设
  • 理县网站建设公司郑州仿站定制模板建站
  • 手机网站建设网站报价诸城人才网招聘网
  • 一起做网站怎么下单临沂网站制作
  • 公司网站案例企业网站 模版
  • 做的好的响应式网站有哪些网站界面设计案例
  • 上海创意型网站建设icp备案网站信息
  • 网站没收录中山手机网站制作哪家好
  • 代驾软件开发流程wordpress 博客主题 seo
  • 成都的教育品牌网站建设网站广告js代码添加
  • 网站找人做seo然后网站搜不到了网站建设seoppt
  • 做网站优化有用吗学做文案的网站
  • wordpress 知名网站怎么做微网站
  • 用电脑怎么做原创视频网站河南建设工程信息网一体化平台官网
  • 云服务器和网站空间郑州做招商的网站
  • 规模以上工业企业的标准北京seo结算
  • 软件开发过程模型如何做网站性能优化
  • 网站建站公司广州南京江北新区楼盘
  • 哪些做展架图的网站好开发公司2022年工作计划
  • 磨床 东莞网站建设wordpress下载类主题系统主题
  • 免费学编程网站芜湖做网站都有哪些
  • 能发外链的网站门户网站网页设计规范
  • 网站建设所需人力南城区网站建设公司
  • 网站做图尺寸大小手机模板网站模板下载网站有哪些内容
  • 德阳市建设管理一体化平台网站做美食网站
  • 怎么做自己的推广网站2024年瘟疫大爆发
  • vps正常网站打不开linux网站建设