庄赢会员管理体系操作表达

又画了三个圆,但此次那么些带了个触摸,由于方今在搞智能家居类应用,所以同理可得有诸多事物需求自定义如遥控器,调节器,还有一对带动画作用的View,终究叫智能产品嘛,无法就是开和关四个挑选加一些图片吧,所以还是要自定义一些控件的,昨天以此是一个环形调节期,能够适应于空调可能热水器的长距离调节控件,我们重假若用来装备的调档。

① 、庄赢会员管理种类是个怎样的系统?

main.jpg

  • 庄赢会员管理系列主假若支持庄家管理会员。

上次的写的贰个控件 炫酷的气氛净化器控件 :
AirPurgeLayoutView

贰 、以后主子运行的情势是何等?

1.重庆大学成效

  • 背阴灯渐变
  • 背光灯调色
  • 控制环的颜料
  • 决定环形的度数
  • 平整达成调节
  • 其中所以参数都能够微调
  • 主人家运行网站的次第和数据库都在上家的服务器上,程序和数据库都是由上家进行珍爱的,庄家唯有一个管理后台,说白了玩家的富有数据包涵网站的富有数据都不在庄家本身手里,庄家自然是不放心了。

2.背光灯功用

此处说的背光灯效果是第②个圆环的阴影背景那里实现仍旧非凡不难的,但须要器重一下回忆闭馆硬件加快,要不然就不曾效劳了。

  1. setLayerType(LAYER_TYPE_SOFTWARE, null); //要关闭硬件加速
  2. mPaint.setShadowLayer(mCurShadowRadius, 0, 0,
    mSecondCircleShadowColor); //设置圆环阴影
  3. 落到实处动画效果

sweep.gif

private void onStartBacklightAnim() {
        if (mBacklightAnim != null && mBacklightAnim.isRunning()) {
            return;
        }
        mBacklightAnim = ObjectAnimator.ofFloat(this,"curShadowRadius",0,mSecondCircleShadowRadius);
        mBacklightAnim.setDuration(mBacklightAnimDurtion);
        mBacklightAnim.setRepeatCount(ValueAnimator.INFINITE);
        mBacklightAnim.setRepeatMode(ValueAnimator.REVERSE);
        mBacklightAnim.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                mCurShadowRadius = mSecondCircleShadowRadius;
            }
        });
        mBacklightAnim.start();
    }

三 、近日主子是怎样保险数据安全的?

3.落到实处外圆环环形渐变

其一完成也挺不难的比方你理解android自定义view有三种常用渐变方法那个一看就通晓(1.
LinearGradient 线性渐变 2.RadialGradient 辐射渐变 3.SweepGradient
环形渐变)其实还有一些但那四个相比较常用不理解的google一下要么看下官网就ok了,那里运用的是SweepGradient
但有一个题材正是他是360°的颜色从0度起初到终极无法调节颜色起头角度,所以使用时最幸好第一个人加多加1人颜色。

//绘制颜色
if (mColors != null && mColors.length != 0) {
        canvas.save();
        canvas.rotate(90, mCenterX, mCenterY);
        if (mColors.length == 1) {
             mPaint.setColor(mColors[0]);
        } else if (mColors.length>1) {
             SweepGradient sweepGradient = new SweepGradient(mCenterX, mCenterY, mColors, null);
             mPaint.setShader(sweepGradient);
       ![sweep.gif](http://upload-images.jianshu.io/upload_images/2646598-5d1fbd181e0411b6.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
}
      canvas.drawArc(rectF, (360 - mThreeRingAngle) / 2, mThreeRingAngle, false, mPaint);
      mPaint.setShader(null);
      canvas.restore();
}
  • 日常为了安全,庄家都会把会员数量,入款数据,出款数据等重点数据都别的复制一份在excel里面备份来保险数据更安全。

4. 滑行控制

兑现滑动控制重点是监听下view的onTouch伊芙nt方法,那里关键控件的逻辑差不多是,当用户手指按下这么些控件时会判断是还是不是单机控件的第一个控制圆环,假使有出发控制,假如没有不处理触摸。

slide.gif

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if (isForbidSlide) return false;

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                onStopAutoFlingAnim();  //有动画立刻停止
                boolean isTakeOver = isTakeOverTouch(event.getX(),event.getY()); //第一次单机在圆环上才接管触摸
                if (isTakeOver) {
                    mPreX = (int) event.getX();
                    mPreY = (int) event.getY();
                    refreshAngle(mPreX,mPreY,true);
                    return true;
                } else {
                    return false;
                }
            case MotionEvent.ACTION_MOVE:
                refreshAngle((int) event.getX(),(int) event.getY(),false);
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true; //consumption
    }

      /**
      * 判断是否接管触摸 两种情况
      */
    private boolean isTakeOverTouch(float downX,float downY) {

        //加个0.5防止有些人眼神或手不好点不到圆弧上
        float minRadius = mThreeCircleRadius - mThreeCircleWidth/2f - 0.5f;
        float maxRadius = mThreeCircleRadius + mThreeCircleWidth/2f + 0.5f;

        //到按下点到圆心的距离
        float distanceCircle = (float) Math.abs(Math.sqrt((downX-mCenterX)*(downX-mCenterX)+(downY-mCenterY)*(downY-mCenterY)));
        if (distanceCircle >= minRadius && distanceCircle <= maxRadius) {
            if (mThreeRingAngle > 180 && downY > mCenterY) {
                float angle = (float) (Math.atan(Math.abs(downX-mCenterX)/Math.abs(downY-mCenterY))*180/Math.PI);
                if ((360-mThreeRingAngle)/2f > angle) {
                    return false;
                }
            } else if (mThreeRingAngle <= 180) {
                if (downY>mCenterY) {
                    return false;
                } else {
                    float angle = (float) (Math.atan(Math.abs(downX-mCenterX)/Math.abs(downY-mCenterY))*180/Math.PI);
                    if (angle > (360-mThreeRingAngle)/2f) {
                        return false;
                    }
                }
            }
            return true;
        }
        return false;
    }

④ 、如今主人这样会有啥难题?

5.兑现代码滑动

那个也很简单首要是现实根据进度完结动画性的更动进程,但需求专注的是当触摸时即时结束动画,假如动画在运维的。

control.gif

private ValueAnimator mAutoFlingAnim;
    public void setCurAngle(float progress,boolean isWantAnim) {
        if (isWantAnim) {
            if (mAutoFlingAnim != null && mAutoFlingAnim.isRunning()) {
                mAutoFlingAnim.cancel();
                mAutoFlingAnim.removeAllUpdateListeners();
                mAutoFlingAnim = null;
            }
            mAutoFlingAnim = new ValueAnimator();
            float curProgress = ((mCurAngle+90+mThreeRingAngle/2f)%360)/mThreeRingAngle;
            mAutoFlingAnim.setFloatValues(curProgress,progress);
            mAutoFlingAnim.setDuration((long) (Math.abs(progress-curProgress)*2000));
            mAutoFlingAnim.setInterpolator(new LinearInterpolator());
            mAutoFlingAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    float value = (float) valueAnimator.getAnimatedValue();
                    int angle = (int) (value*mThreeRingAngle + (360-mThreeRingAngle)/2f+90)%360;
                    if (mCurAngle != angle) {
                        mCurAngle = angle;
                        invalidate();
                    }
                }
            });
            mAutoFlingAnim.start();
        } else {
            this.mCurAngle = (int) (progress*mThreeRingAngle + (360-mThreeRingAngle)/2f+90)%360;
            invalidate();
        }
    }
  • excel里面包车型客车数额查询总计不方便人民群众,不难出错,数据也不标准,相当大心遇到了键盘大概数量现已被修改或许被去除,但操作人士并不知道他刚刚碰着了键盘影响到了多少,最终数据就不标准了。

6.感想

不久前支付智能家居产品,要求常常定义一些view,但万一您完全的看完过android
view的api时,你会发现实际真的简单,很多google都给你封装好了,像什么渐变啊,贝塞尔曲线,图片剪切,动画,触摸滑动,布局填充等,你只要学会拼接就足以,所以假若项目须要大批量运用自定义控件的能够去系统的看叁回view的api。

⑤ 、如何化解庄家的标题

7. RegulatorView的源码地址

  • 故此必要3个软件系统来援助庄家管理好那个重庆大学的数目,提升级工程师作功用,保险数据既安全又准确

8. 气氛净化器控件 : AirPurgeLayoutView

6、用庄赢会员管理体系数据安全啊?

  • 庄赢会员管理种类是一个单机的系统,也便是本系统不会接连互联网,那样保障庄家的数码只在主人公的这一台微型总结机下边不会败露。假诺主人有您猜疑能够参考“明令禁止软件连连网络的法门”来设置,那样设置后电脑上边的此外软件都以无法延续互联网的,请主人放心使用

七 、会员管理

  • 双击 上次入款
    能够查阅那一个会员的享有入款
  • 双击 上次出款
    可以查看那一个会员的持有出款
  • 导出每便最两只好导出三千0条,如若数量多出30000条,请按查询条件分批次导出,导出恐怕要求几十秒钟,请耐心等待…….
  • 导入要求用系统钦赐的Excel导入模板,模板无法修改,往模板里面对应参与数据就足以了,导入数据也许须求几十分钟,请耐心等待…….

图片 1

  •  模板表头不可能改改,无法交换顺序,只往里对应列下面投入会员数量就足以了

图片 2

 

⑧ 、入款记录

 

图片 3

 

玖 、出款记录

 

图片 4

 

 

⑩ 、银行卡管理

  • 累加:先点击清空按钮,再录入银行卡音讯, 然后点击 添加/编辑 来保存
  • 编写:点击银行卡列表里面包车型大巴一条数据,会在下边框内部展现银行卡里面的音信,那时能够修改,然后点击
    添加/编辑 来保存

图片 5

 

 

十壹 、代理管理

 

  • 丰盛:先点击清空按钮,再录入代理音信, 然后点击 添加/编辑 来保存
  • 编纂:点击代理列表里面包车型地铁一条数据,会在上边框里面呈现代理里面包车型客车音信,那时能够修改,然后点击
    添加/编辑 来保存

图片 6

 

 

十二 、状态管理

 

  • 丰盛:先点击清空按钮,再录入情状新闻, 然后点击 添加/编辑 来保存
  • 编写:点击状态列表里面包车型客车一条数据,会在上边框里面显示状态之中的音信,那时能够修改,然后点击
    添加/编辑 来保存

图片 7

 

十③ 、等级管理

 

  • 丰裕:先点击清空按钮,再录入等级信息, 然后点击 添加/编辑 来保存
  • 编辑:点击等级列表里面包车型大巴一条数据,会在上边框里边突显等级里面包车型地铁音讯,这时能够修改,然后点击
    添加/编辑 来保存

图片 8

 

十肆 、系统日志

 图片 9

 

十五 、系统音信

  • 激活码:倘使软件没有激活请点击 输入激活码按钮
    在弹出框里面输入激活码来激活软件
  • 修改密码:软件的暗许登录密码是admin123456 在报到软件后请及时修改密码
  • 庄赢会员管理体系技术帮助与搭档:QQ:2095329785

图片 10

 

 

 

庄赢会员管理种类技术扶助与搭档客服QQ:2095329785

发表评论

电子邮件地址不会被公开。 必填项已用*标注