StyleTemplate.java 文件源码

java
阅读 25 收藏 0 点赞 0 评论 0

项目:grouptuity 作者:
private void apply(final ViewTemplate<?,?> vt, boolean forced)
{
    if(oldWidth!=vt.getWidth() || oldHeight!=vt.getHeight() || forced)
    {
        oldWidth = vt.getMeasuredWidth();
        oldHeight = vt.getMeasuredHeight();

        if(circularSides)
        {
            int rectangleRadius = vt.getHeight()/2;
            topLeftRadius = rectangleRadius;
            topRightRadius = rectangleRadius;
            bottomLeftRadius = rectangleRadius;
            bottomRightRadius = rectangleRadius;
            leftPadding = rectangleRadius+leftContraction;
            rightPadding = rectangleRadius+rightContraction;
        }

        if(shapeDrawable!=null)
            shapeDrawable.setBounds(leftContraction, topContraction, vt.getMeasuredWidth()-rightContraction, vt.getMeasuredHeight()-bottomContraction);
    }

    vt.setPadding(leftPadding,topPadding,rightPadding,bottomPadding-bottomPaddingCompensationPixels);

    if(innerGradient)
    {
        if(shapeDrawable==null)
            innerPaint.setShader(new LinearGradient(0,0,0,vt.getMeasuredHeight(),primaryColor,secondaryColor,Shader.TileMode.CLAMP));
        else if(gradientSizingLL!=null)
        {
            shapeDrawable.setShaderFactory(new ShaderFactory()
            {
                public Shader resize(int width, int height)
                {
                    int startPos = 0;
                    for(int i=0; i<gradientSizingLL.getChildCount(); i++)
                    {
                        View v = gradientSizingLL.getChildAt(i);
                        if(v.equals(vt) || v.equals(vt.getParent()))
                            break;
                        else
                            startPos += v.getMeasuredHeight();
                    }

                    final double fullSpan = gradientSizingLL.getHeight();
                    final int startA = (primaryColor >> 24) & 0xFF;
                    final int endA = (secondaryColor >> 24) & 0xFF;
                    final int startR = (primaryColor >> 16) & 0xFF;
                    final int endR = (secondaryColor >> 16) & 0xFF;
                    final int startG = (primaryColor >> 8) & 0xFF;
                    final int endG = (secondaryColor >> 8) & 0xFF;
                    final int startB = (primaryColor >> 0) & 0xFF;
                    final int endB = (secondaryColor >> 0) & 0xFF;
                    final int actualA1 = (int)(startA + (endA-startA)*startPos/fullSpan);
                    final int actualA2 = (int)(startA + (endA-startA)*(startPos+vt.getHeight())/fullSpan);
                    final int actualR1 = (int)(startR + (endR-startR)*startPos/fullSpan);
                    final int actualR2 = (int)(startR + (endR-startR)*(startPos+vt.getHeight())/fullSpan);
                    final int actualG1 = (int)(startG + (endG-startG)*startPos/fullSpan);
                    final int actualG2 = (int)(startG + (endG-startG)*(startPos+vt.getHeight())/fullSpan);
                    final int actualB1 = (int)(startB + (endB-startB)*startPos/fullSpan);
                    final int actualB2 = (int)(startB + (endB-startB)*(startPos+vt.getHeight())/fullSpan);

                    return new LinearGradient(0,0,0,vt.getHeight(),Color.argb(actualA1,actualR1,actualG1,actualB1),Color.argb(actualA2,actualR2,actualG2,actualB2),Shader.TileMode.CLAMP);
                }
            });
        }
    }

    vt.applyStyle();
    vt.requestLayout();
    vt.invalidate();
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号