精华内容
下载资源
问答
  • 设置窗体的标题栏

    千次阅读 2017-08-15 13:57:17
    1.使窗体标题栏文字右对齐 RightToLeft属性 No:文本从左至右读取,这是默认选项Yes:文本从右至左读取Inherit:文本的读取方向从父控件继承 2.没有标题栏也能更改窗体大小 隐藏Windows窗体的标题栏之后,窗体通常是...

    1.使窗体标题栏文字右对齐

    RightToLeft属性

    • No:文本从左至右读取,这是默认选项
    • Yes:文本从右至左读取
    • Inherit:文本的读取方向从父控件继承

    2.没有标题栏也能更改窗体大小

    隐藏Windows窗体的标题栏之后,窗体通常是不能改变大小的。因为屏蔽标题栏之后,窗体默认边框也去掉了。

           private void button2_Click(object sender, EventArgs e)
            {
                this.Text = "";
                ControlBox = false;
            }

    3.设置闪烁的标题栏

    使用了API函数FlashWindow

     private void button3_Click(object sender, EventArgs e)
            {
                timer1.Enabled = true;
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                timer1.Enabled = false;
            }
    
            [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
            public static extern bool FlashWindow(IntPtr handle, bool bInvert);
            private void timer1_Tick(object sender, EventArgs e)
            {
                FlashWindow(this.Handle, true);              //启动窗体闪烁
            }


    展开全文
  • 左中右结构的标题栏通用样式写法 作者:feiwen8772 我们先了解左中右结构标题栏特点: 1.标题栏具有一定的高度,宽度一般自适应。 2.标题栏左边、右边不具有延伸不变的特性,如略成弧形。 解决方案总体思路...

    左中右结构的标题栏通用样式写法


    作者:feiwen8772


    我们先了解左中右结构标题栏特点:

    1.标题栏具有一定的高度,宽度一般自适应。

    2.标题栏左边、右边不具有延伸不变的特性,如略成弧形。

    解决方案总体思路设:

    最外层定高度,且设背景为水平方向平铺,这样可呈现垂直方向的渐变效果。

    内层套浮左浮右两块用以实现标题栏的左右不同。

    继续在内层添加浮左或浮右块,可放标题文字或者“更多”等内容。注意浮左块和浮右块的顺序是颠倒的。

    以下用[http://style.china.alibaba.com/css/blog/alicn_bb.css]作为全局样式实现以上标题样式

     

    <style type=”text/css”>
    /*————–   以下样式包含于 globle 样式中 ——————–*/
     
    /*相关样式*/
     .l
    {float:left !important;display:inline}
     .ft14
    {font-size:14px;}
     .b
    {font-weight:bold}
     
    /**********/

     
    /* TiTle 样式 */
     .tt
    {position:relative;height:37px;overflow:hidden;background:url(http://img.china.alibaba.com/images/cn/blog/home/070807/ttsty_tt_01.gif) repeat-x}
     .ttl
    {float:left;width:2px;height:100%;background:url(http://img.china.alibaba.com/images/cn/blog/home/070807/ttsty_lt_01.gif) no-repeat}
     .ttr
    {float:right;width:2px;height:100%;background:url(http://img.china.alibaba.com/images/cn/blog/home/070807/ttsty_rt_01.gif) no-repeat}
     
    /**********/
    /*——————————————————————*/
    div.tt_2
    {height:30px;background:url(http://img.china.alibaba.com/images/cn/chat/rc_tt_tt_02.gif) repeat-x}
    .tt_2 .ttl
    {width:6px;background:url(http://img.china.alibaba.com/images/cn/chat/rc_tt_tl_02.gif) no-repeat}
    .tt_2 .ttr
    {width:6px;background:url(http://img.china.alibaba.com/images/cn/chat/rc_tt_tr_02.gif) no-repeat}

    div.tt_3
    {height:36px;background:url(http://img.china.alibaba.com/images/cn/chat/rc_tt_tt_03.gif) repeat-x}
    div.tt_3 .ttl
    {width:5px;background:url(http://img.china.alibaba.com/images/cn/chat/rc_tt_tl_03.gif) no-repeat}
    div.tt_3 .ttr
    {width:5px;background:url(http://img.china.alibaba.com/images/cn/chat/rc_tt_tr_03.gif) no-repeat}

    </style>
    <div class=”tt tt_3″>
     <div class=”ttl”></div>
     <div class=”l f14 b”>title words</div>
     <div class=”ttr”></div>
    </div>

     

    如果要更换另一套标题样式,如上代码可见我们需要设定新的 classname 例如 tt_2 然后对 height width background 等关键样式重写,这里几乎重写了原来的所有样式,似乎 global 里是多余的,其实不然,至少我们不用再敲一遍代码,不用再考虑一遍代码的完备性,复制重写其实是我们工作中常用的加快效率的手段,这里我只是把它更规范化了,把要复制的内容放入了一个global文件,以正其名。

    更重要的一点是:html 代码部分即内容部分结构统一,不需要有太大变化。

    当然,global 文件里所定义的样式不会都象 .tt 一样在使用时都需要重写一遍,否则,global 文件存在的意义会大打折扣,我有意把最不具可重复性的样式拿来先讲,其实是为了后文作铺垫,以求让大家深刻认识到global样式对于缩减代码起到的巨大作用。

    展开全文
  • 图框右下角必须要有一标题栏标题栏中的文字方向为与看图方向一致。 2.图线的种类有粗实线、细实线、波浪线、双折线、虚线、细点划线、粗点划线、双点划线等八类 3.图样中,机件的可见轮廓线用粗实线画出,不可见...

    一、机械制图基础知识

    1.纸幅面按尺寸大小可分为5种,图纸幅面代号分别为A0、A1、A2、A3、A4。图框右下角必须要有一标题栏,标题栏中的文字方向为与看图方向一致。

    2.图线的种类有粗实线、细实线、波浪线、双折线、虚线、细点划线、粗点划线、双点划线等八类

    3.图样中,机件的可见轮廓线用粗实线画出,不可见轮廓线用虚线画出,尺寸线和尺寸界线用细实线画出来,对称中心线和轴线用细点划线画出。虚线、细实线和细点划线的图线宽度约为粗实线的1/3。

    4.比例是指图中图形尺寸与实物尺寸之比。

    5.比例1:2是指实物尺寸是图形尺寸的2倍,属于缩小比例。

    6.比例2:1是指图形尺寸是实物尺寸的2倍,属于放大比例。

    7.在画图时应尽量采用原值比例的比例,需要时也可采用放大或缩小的比例,其中1:2为缩小比例,2:1为放大比例无论采用那种比例图样上标注的应是机件的实际尺寸。

    8.图样中书写的汉字、数字和字母,必须做到字体工整,笔画清楚,间隔均匀,排列整齐,汉字应用长仿宋体书写。

    9.标注尺寸的三要素是尺寸界限、尺寸线、尺寸数字。

    10.尺寸标注中的符号:R表示圆半径,ф表示圆直径,Sф表示球直径。

    11.图样上的尺寸是零件的实际尺寸,尺寸以毫米为单位时,不需标注代号或名称。

    12.标准水平尺寸时,尺寸数字的字头方向应向上;标注垂直尺寸时,尺寸数字的字头方向应朝左。角度的尺寸数字一律按水平位置书写。当任何图线穿过尺寸数字时都必须断开。

    13.斜度是指斜线对水平线的倾斜程度,用符号∠表示,标注时符号的倾斜方向应与所标斜度的倾斜方向一致。

    14.装配图中的尺寸种类有①规格尺寸②装配尺寸③安装尺寸④外形尺寸⑤其它重要尺寸。

    15.符号“∠1:10”表示斜度1:10,符号“ 1:5”表示锥度1:5。

    16.平面图形中的线段可分为已知线段、中间线段、连接线段三种。它们的作图顺序应是先画出已知线段,然后画中间线段,最后画连接线段。

    17.已知定形尺寸和定位尺寸的线段叫已知线段;有定形尺寸,但定位尺寸不全的线段叫中间线段;只有定形尺寸没有定位尺寸的线段叫连接线段。

    18.主视图所在的投影面称为正投影面,简称正面,用字母V表示。俯视图所在的投影面称为水平投影面,简称水平面,用字母H表示。左视图所在的投影面称为侧投影面,简称侧面,用字母W表示。

    19.三视图的投影规律是,主视图与俯视图等长;主视图与左视图等高;俯视图与左视图等宽。

    20.零件有长、宽、高三个方向的尺寸,主视图上能反映零件的长和高,俯视图上只能反映零件的长和宽,左视图上只能反映零件的高和宽。

    21.零件有上、下、左、右、前、后六个方位,在主视图上只能反映零件的上,下,左,右方位,俯视图上只能反映零件的前,后,左,右方位,左视图上只能反映零件的上,下,前,后方位。

    22.基本视图一共有三个,它们的名称分别是主视图,俯视图,左视图。

    23.除基本视图外,还有仰视图,右视图和后视图三种视图。

    24.按剖切范围的大小来分,剖视图可分为全剖视图、半剖视图、局部剖视图三种。

    25.剖视图的剖切方法可分为全剖、半剖、局部剖、阶梯剖、组合剖五种。

    26.剖视图的标注包括三部分内容:①表示剖切平面位置的符号(剖切线),并在两端标有字母②表示投影方向的箭头③在剖视图上方注写有“×­——×”字样。

    27.省略一切标注的剖视图,说明它的剖切平面通过机件的对称平面进行剖切后而后画出的 。

    28.剖面图用来表达零件的内部形状,剖面可分为实体部分和空心部分两种。

    29.移出剖面和重合剖面的区别是:移出剖面-画在视图轮廓外面的剖面,重合剖面-画在视图轮廓里面的剖面。

    30.图样中的图形只能表达零件的结构形状,零件的真实大小应以图样上所标注的尺寸为依据。

    31.标注尺寸的数字称为尺寸基础,机器零件长,宽,高三个方向上,每个方向至少有一个尺寸基准。

    32.螺纹的五要素是螺纹牙型,直径,螺距,导程,线数,旋向。

    33.只有当内、外罗纹的牙型,直径,螺距,线数,旋向一致时,他们才能互相旋合。

    34.螺纹的牙型、直径、螺距都符合国家标准规定的称为标准螺纹;牙型不符合国家标准的称为非标准螺纹;牙型符合国家标准,但直径、螺距不符合国家标准的称为特殊螺纹。

    35.外螺纹的规定画法是:大径用_d___表示,小径用_d1_表示,终止线用粗实线 表示。

    36.在剖视图中,内螺纹的大径用_D___表示,小径用_D1___表示,终止线用粗实线表示。不可见螺纹孔,其大径、小径和终止线都用粗实线表示。

    37.常见的螺纹联接形式有螺栓连接、双头螺柱连接和螺钉连接。

    38.常用键的种类有普通平键、半圆键、钩头楔键、花键。

    39.圆柱齿轮按齿轮的方向可分为直齿、斜齿和人字齿。

    40.齿轮轮齿部分的规定画法是:齿顶圆用粗实线绘制;分度圆用细点划线绘制;齿根圆用细实线绘制,也可省略不画。在剖视图中,齿根圆用粗实线绘制。

    41.当零件所有表面具有相同的表面粗糙度要求时,可在图样右上角统一标注;当零件表面的大部分粗糙度相同时,可将相同的粗糙度代号标注在右上角,并在前面加注其余两字。

    42.一张完整的装配图应具有下列四部分内容;①一组视图;②必要尺寸;③技术要求;④零件序号和明细栏。

    43.装配图中的尺寸种类有①规格尺寸②装配尺寸③安装尺寸④外形尺寸⑤其它重要尺寸。

    展开全文
  • 效果如图所示: 可见要实现次效果,需要自定义View继承TextView...属性包括,圆角矩形的圆角半径长度、小直角三角形对角线一半的长度,以及颜色、圆角矩形高度、标题栏滑动方向。 代码如下: <declare-style

    效果如图所示:
    在这里插入图片描述
    在这里插入图片描述
    可见要实现次效果,需要自定义View继承TextView(因为有文字,继承这个会好一些)。
    外圈是一个橙色的背景,形状为圆角矩形,以及底部有一个小直角三角形倒过来的形状。里面是变色文字。这里我们先实现外圈的橙色背景。

    绿色背景:

    1. 在res文件夹中的values,新建一个文件attrs.xml, 这个是对于自定义view的声明文件。
    2. 属性包括,圆角矩形的圆角半径长度、小直角三角形对角线一半的长度,以及颜色、圆角矩形高度、标题栏滑动方向。
      在这里插入图片描述
      代码如下:
    <declare-styleable name="LoryMessageTitle">
            <attr name="roudedRadius" format="dimension"></attr><!--矩形圆角半径径-->
            <attr name="triangleLengthHalf" format="dimension"></attr><!--直角三角形对角线长度一半-->
            <attr name="rectHeight" format="dimension"></attr><!--圆角矩形高度-->
            <attr name="colorAll" format="color"></attr><!--控件颜色-->
            <attr name="changeDirection">   <!--控件变化方向-->
                <enum name="LEFT_TO_RIGHT" value="1"></enum>
                <enum name="RIGHT_TO_LEFT" value="2"></enum>
            </attr>
        </declare-styleable>
    

    3.自定义view名 LoryMessageTitle继承Textview,代码如下:

    public class LoryMessageTitle extends androidx.appcompat.widget.AppCompatTextView {
        //背景图案
        private float progress = 1f;//移动比例参数progress,默认是0
        private int mRoundedRadius = 3;//圆角矩形直径默认长度
        private int mTraigleLength = 4;//直角三角形对角线边默认一半长度
        private int mRectHeight = 20;//圆角矩形默认高度
        private int mRectWidth = 20;//圆角矩形默认长度
        private int mColor = getResources().getColor(R.color.colorGreener,null);//控件默认颜色
        private int mDirection = 1; //默认变化从左到右
        private Paint mPaint;//控件绘制的画笔,由于控件背景色颜色统一,所以用一支画笔就可以了
        public LoryMessageTitle(Context context){
            this(context,null);
        }
        public LoryMessageTitle(Context context, AttributeSet attrs){
            this(context,attrs,0);
        }
        public LoryMessageTitle(Context context,AttributeSet attrs,int delStyleAttr){
            super(context,attrs,delStyleAttr);
            //初始化
            init(context,attrs);
        }
        //初始化函数
        public void init(Context context,AttributeSet attrs){
            TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.LoryMessageTitle);
            mRoundedRadius = array.getDimensionPixelSize(R.styleable.LoryMessageTitle_roudedRadius,sp2px(mRoundedRadius));//圆角半径大小
            mTraigleLength = array.getDimensionPixelSize(R.styleable.LoryMessageTitle_triangleLengthHalf,sp2px(mTraigleLength));//三角形对角线长度一半
            mRectHeight = array.getDimensionPixelSize(R.styleable.LoryMessageTitle_rectHeight,sp2px(mRectHeight));//圆角矩形高度
            mColor = array.getColor(R.styleable.LoryMessageTitle_colorAll,mColor);//控件颜色
              mDirection = array.getInteger(R.styleable.LoryMessageTitle_changeDirection,mDirection);//控件移动方向
            mPaint = new Paint();
            mPaint.setAntiAlias(true);//抗锯齿
            mPaint.setDither(true);
            mPaint.setColor(mColor);
            mDirection = array.getInteger(R.styleable.LoryMessageTitle_changeDirection,mDirection);
        }
        //sp  to  px  不多说,就是 sp转化为 px,要是控件使用者用dp怎么办,那就让他自己添加个dp转sp的函数,就你事多
        public int sp2px(int sp){
            return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, this.getResources().getDisplayMetrics());
        }
        //测量方法
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthmode = MeasureSpec.getMode(widthMeasureSpec);//宽度模式
            int heightmode = MeasureSpec.getMode(heightMeasureSpec);//高度模式
            int widthsize = MeasureSpec.getSize(widthMeasureSpec);//宽度大小
            int heightsize = MeasureSpec.getSize(heightMeasureSpec);//高度大小
            //要是用户填的wrap_content,宽度、高度至少时
            if (widthmode==MeasureSpec.AT_MOST){
                int widthsize = sp2px(mRectWidth)+getPaddingLeft()+getPaddingRight();//背景宽度
            }
            if (heightmode==MeasureSpec.AT_MOST){
                int heightsize = mRectHeight+mTraigleLength+getPaddingTop()+getPaddingBottom();
            }
            setMeasuredDimension(widthsize,heightsize);
        }
        //绘制方法,一开始绘制一个静态的控件,然后这个控件会移动,有个0-1的参数,决定这个控件移动的比例,引入这个参数叫 progress。默认是0;
    
        @Override
        protected void onDraw(Canvas canvas) {
            //静态控件如下
    //        //首先绘制静态的圆角矩形
    //        { canvas.save();
    //        RectF rectf = new RectF(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom() - mTraigleLength);
    //        canvas.drawRoundRect(rectf, mRoundedRadius, mRoundedRadius, mPaint);
    //        canvas.restore();
    //        //然后绘制三角形,是一个倒过来的直角三角形,可以用一个倒过来的正方形代替,对角线和矩形重合即可,也可以通过路径绘制
    //        canvas.save();
    //        Path path = new Path();
    //        path.moveTo(getWidth() / 2 - mTraigleLength, getHeight() - getPaddingBottom() - mTraigleLength);//起点
    //        path.lineTo(getWidth() / 2, getHeight() - getPaddingBottom());//往下移动
    //        path.lineTo(getWidth() / 2 + mTraigleLength, getHeight() - getPaddingBottom() - mTraigleLength);//往右移动
    //        path.close();//路径闭合
    //        canvas.drawPath(path, mPaint);
    //        canvas.restore();
    //    }
            //颜色更改后,画笔也要及时更新哈
            mPaint.setColor(mColor);
           //绘制动态圆角矩形,随着progress运动,圆角矩形的左边x参数在增加,右边参数也在增加,由于控件长度固定,
           //所以可以出现圆角矩形右侧被吞噬的样子
           float x1;//圆角矩形左侧坐标
           float x2;//圆角矩形右侧坐标
            Rect bounds = new Rect();
            if (mDirection==2){//如果移动方向是从右到左
               x1 = (1-progress)*(getWidth())+getPaddingLeft();
               x2 = (2-progress)*(getWidth())-getPaddingRight();
            }else {//移动方向为从左到右
                x1 = (progress-1)*(getWidth())+getPaddingLeft();
               x2 = progress*(getWidth())-getPaddingRight();
            }
            canvas.save();
            RectF rectf =new RectF(x1,getPaddingTop(),
                    x2,getHeight()-getPaddingBottom()-mTraigleLength);//矩形
            canvas.drawRoundRect(rectf,mRoundedRadius,mRoundedRadius,mPaint);//绘制圆角矩形
            //然后绘制三角形,是一个倒过来的直角三角形,可以用一个旋转的正方形代替,对角线和矩形重合即可,也可以通过路径绘制
            //我个人更喜欢路径Path,关于Path的方法百度上有
            canvas.save();
            Path path = new Path();
            path.moveTo(getWidth()/2-mTraigleLength+x1-getPaddingLeft(),getHeight()-getPaddingBottom()-mTraigleLength);//起点,三角形左边起点
            path.lineTo(getWidth()/2+x1-getPaddingLeft(),getHeight()-getPaddingBottom());//往下移动
            path.lineTo(getWidth()/2+mTraigleLength+x1-getPaddingLeft(),getHeight()-getPaddingBottom()-mTraigleLength);//往右移动,三角形右边的点
            path.close();//路径闭合,将绘制的三个点闭合
            canvas.drawPath(path,mPaint);//绘制三角形
            canvas.restore();
        }
    //  最后就是这个控件随着progress变化而变化,每次变化都要重新绘制,
    //invalidate方法会再次调用ondraw方法
        public void changeProgress(float progresser){//设置改变进度的方法
            progress = progresser;
            invalidate();//重新绘制
        }
    // 也有人说,我不想在xml文件中设置控件状态,我想java文件中改变控件的圆角矩形高度、圆角大小,小三角形对角线宽一半,颜色等
        //你丫的需求真多呀,就你多事
      
        public void setSate(int roundedRadius,int roundedheight,int traigleLengthHalf,int color){//改变控件状态
            mRoundedRadius = roundedRadius;
            mRectHeight = roundedheight;
            mTraigleLength = traigleLengthHalf;
            mColor = color;
            invalidate();
        }
     
        public void setdirction(int c_direction){//设置控件变化方向
            mDirection = c_direction;
            invalidate();
        }
        public void setmColor(int color){//设置控件颜色
            mColor = color;
            invalidate();
        }
    }
    

    好了这个控件定义完了,那么效果如何?就把它当作textview就测试一下,要是能够绘制出这个效果就说明可用了。
    接下来就是字体的绘制,我们再造一个自定view,也是继承TextView.

    可变色字体的绘制:
    在这里插入图片描述
    两种颜色的字体,而且可以随着progress变化而变化,那么如何实现呢?

    很简单,只要将画布Canvas分割,裁成两个区域,一个是灰色,一个是白色,然后区域会随着progress变化而变化。

    1. 在attrs.xml文件中声明一个字体的自定义view
     <declare-styleable name="ChangeColorText">
            <attr name="changeColor" format="color"></attr><!--文字改变后的颜色-->
            <attr name="orignColor" format="color"></attr><!--文字原颜色-->
            <attr name="changeDirection">   <!--控件变化方向-->
                <enum name="LEFT_TO_RIGHT" value="1"></enum>
                <enum name="RIGHT_TO_LEFT" value="2"></enum>
            </attr>
        </declare-styleable>
    
    1. 自定义view, ChangeColorText继承TextView:
    public class ChangeColorText extends androidx.appcompat.widget.AppCompatTextView {
    
        private float progress = 1f;//移动比例参数progress,默认是0
        //字体
        private int mOrignColor = getResources().getColor(R.color.colorChange,null);//默认字体原始颜色
        private int mChangeColor = Color.WHITE;//默认字体变化颜色
        private Paint mOrignPaint,mChangePaint;//绘制两种字体的画笔
        private int textsize = 50;//默认原字体大小px
        private int textsize1 = 55;//默认字体变化的大小
        private int mDirection = 1; //默认变化从左到右
        public ChangeColorText(Context context){
            this(context,null);
        }
        public ChangeColorText(Context context, AttributeSet attrs){
            this(context,attrs,0);
        }
        public ChangeColorText(Context context,AttributeSet attrs,int delStyleAttr){
            super(context,attrs,delStyleAttr);
            //初始化
            init(context,attrs);
        }
        //初始化函数
        public void init(Context context,AttributeSet attrs){
            TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.LoryMessageTitle);
           
            //字体
            mOrignColor = array.getColor(R.styleable.LoryMessageTitle_orignColor,mOrignColor);//原始颜色
            mChangeColor = array.getColor(R.styleable.LoryMessageTitle_changeColor,mChangeColor);//变化颜色
            mDirection = array.getInteger(R.styleable.LoryMessageTitle_changeDirection,mDirection);//变化方向
            //orignPaint画笔初始化
            mOrignPaint = new Paint();
            mOrignPaint.setColor(mOrignColor);
            mOrignPaint.setAntiAlias(true);
            mOrignPaint.setDither(true);
            mOrignPaint.setTextSize(textsize);
            //changePaint画笔初始化
            mChangePaint = new Paint();
            mChangePaint.setColor(mChangeColor);
            mChangePaint.setAntiAlias(true);
            mChangePaint.setDither(true);
            mChangePaint.setTextSize(textsize1);
    
        }
        //sp  to  px  不多说,就是 sp转化为 px,要是控件使用者用dp怎么办,那就让他自己添加个dp转sp的函数,就你事多
        public int sp2px(int sp){
            return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, this.getResources().getDisplayMetrics());
        }
        //测量方法
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthmode = MeasureSpec.getMode(widthMeasureSpec);
            int heightmode = MeasureSpec.getMode(heightMeasureSpec);
            int widthsize = MeasureSpec.getSize(widthMeasureSpec);
            int heightsize = MeasureSpec.getSize(heightMeasureSpec);
            //文字的长宽,用画笔测量文字的宽度,长度
            Rect bounds = new Rect();
            mChangePaint.getTextBounds(getText().toString(),0,getText().length(),bounds);
            //要是用户填的wrap_content,宽度、高度至少
            if (widthmode==MeasureSpec.AT_MOST){
                int widthsize = bounds.width() + getPaddingLeft()+getPaddingRight();//文字宽度
            }
            if (heightmode==MeasureSpec.AT_MOST){
                int heightsize = bounds.height() + +getPaddingTop()+getPaddingBottom();
            }
            setMeasuredDimension(widthsize,heightsize);
        }
        
        @Override
        protected void onDraw(Canvas canvas) {
         //文字的横坐标
            int x = getWidth()/2-bounds.width()/2;
            Paint.FontMetricsInt fontMetricsInt = mOrignPaint.getFontMetricsInt();
            int dy = (fontMetricsInt.bottom - fontMetricsInt.top)/2 - fontMetricsInt.bottom;
            int baseline = getHeight()/2+dy;//基线
            //在绘制变色文字
            if(mDirection==1){//从左到右
                canvas.save();
                canvas.clipRect(0,0,progress*getWidth()-getPaddingLeft(),getHeight());//裁剪坐左边的区域
              //绘制左边文字
               canvas.drawText(getText().toString(),x,baseline,mChangePaint);
                canvas.restore();
                canvas.save();
                canvas.clipRect(progress*getWidth()-getPaddingLeft(),0,getWidth(),getHeight());//裁剪右边的区域
                canvas.drawText(getText().toString(),x,baseline,mOrignPaint);
                canvas.restore();//绘制右边的文字
            }else{//从右到左
                canvas.save();
                canvas.clipRect(0,0,(1-progress)*getWidth()+getPaddingRight(),getHeight());
                canvas.drawText(getText().toString(),x,baseline,mOrignPaint);
                canvas.restore();
                canvas.save();
                canvas.clipRect((1-progress)*getWidth()+getPaddingRight(),0,getWidth(),getHeight());
                canvas.drawText(getText().toString(),x,baseline,mChangePaint);
                canvas.restore();
            }
    
        }
    //  最后就是这个控件随progress变化,而重新绘制。
        public void changeProgress(float progresser){
            progress = progresser;
            invalidate();//重新绘制
        }
        public void setmOrignColor(int c_color){//原文字颜色
            this.mOrignColor = c_color;
            invalidate();
        }
        public void setmChangeColor(int c_color){//变化文字颜色
            this.mChangeColor = c_color;
            invalidate();
        }
        //设置绘制时字体 大小 粗细于一体
        public void setmWordSize(int orignSize,int changSize){
            this.textsize = orignSize;
            this.textsize1 = changSize;
            invalidate();
        }
        public void setdirction(int c_direction){
            mDirection = c_direction;
            invalidate();
        }
     
    }
    
    

    文字也绘制出来了,那么如何将两种效果放在一个控件中呢?简单呀,将两种控件的属性放到一个控件就可以了。这个工作就交给读者吧,我想你通过这两个自定义view的绘制后,应该不难。当然,期间你肯定也会有一些和我当初学的时候的坑。

    大坑汇集:

    1. 标题1在过度标题2 的过程中, 标题1的颜色由白色逐渐变为灰色,标题2的颜色由灰色逐渐变为白色,但是这两个标题的OriginColor和ChangeColor代码中都写成了一样的,导致标题1的颜色由白色逐渐变为灰色,标题2的颜色由白色逐渐变为灰色,这样并没有文字变色移动的效果,理论上 标题1的OriginColor本应该为白色,而标题2的OriginColor应该为灰色,如何解决这个冲突呢?

    答:OriginColor为灰色,ChangeColor为白色。 标题1的移动方向为“从右往左”,而标题2的移动方向设置为“从左到右”。因为代码中,direction的变化会让原色和变色转换。从左边往右边,标题1是由白色变灰色,而从右边往左边,标题1是由灰色变白色。并且, 标题1的进度=1-progress,标题2的进度为 progress.

    1. 可变颜色字体和橙色背景结合时,控件的宽高测量冲突怎么解决?

    答: 可变颜色字体的宽高测量是通过画笔测量单个文字后给出的Bounds决定的,而橙色背景的宽高是人为给定的。要让文字和背景的放置比例位置合理,是一个头疼的问题。作者的方法是基于文字的宽高,再加上固定的长度。至于固定的长度是多长,这个需要读者自己测试把握。作者并没有好的办法。

    1. 标题1移动到标题2过程中,颜色变化和橙色背景移动都是由参数progress决定的,那这个progress的数据来源从哪来呢?换句话说,我怎样可以用手滑动屏幕时,progress随滑动比例而变化呢?

    答: 可滑动标题栏下方的内容是一个ViewPager, viewPager可以适应多个适配器Adapter,至于用哪个Adapter看你个人习惯,不过由于ViewPager内放的是Fragment,所以我建议用FragmentPageAdapter(名字有没有打错哈)。ViewPager有3个关于滑动方法:
    在这里插入图片描述
    看到第一个方法,那个postionOffset,这个就是ViewPager监听滑动比例,范围由(0—1),progress的数据来源就是它。

    以上就是我遇到的坑,其他问题要是读者遇到了,那就评论区留言吧

    展开全文
  • 图框右下角必须有一标题栏标题栏中的文字方向为与看图方向一致。 2. 图线的种类有粗实线、细实线、波浪线、双折线、虚线、细点划线、粗点划线、双点划线等八类 3. 图样中,机件的可见轮廓线用粗实线画出,不可见...
  • word文档的表格 竖向怎么变成横向word中表格无法直接将表格变成横向的,但是可以将word的纸张变成横向。... 第二步:方向选择“横向”,然后应用于选择“插入...点击标题栏的“页面布局”标签,并选择“文字方向”。wor...
  • GUI的元素大致可分为以下几个方面: 窗口 菜单 ...窗口的标题栏可以进行打开、关闭、创建、缩放、移动、删除、重叠等操作 好的GUI窗口应该具备以下标准: 窗口控件的大小、对齐方向、颜色、背景...
  • 以掌握其设置方法),捕捉格点及可视网格设置 10,电气捕捉设置 4,为图纸绘制如下标题栏标题栏格式如下:边框直线为小号(small)直线,颜色为 3 号,文字设置:设计者, ,仿宋_GB2312、常规、四号、黑色;...
  • 支持窗口外观控制、状态、透明度控制 支持窗口操作拦截器、可以拦截任何不正常操作 支持窗口初始化位置、宽高度、最小化宽高度控制 支持窗口加载文字控制 支持窗口滚动条智能判断 支持窗口最小化统一管理 支持窗口...
  • 制表位是指水平标尺上的位置,它指定了文字缩进的距离或一栏文字开始的位置,使用户能够向左、向右或居中对齐文本行;或者将文本与小数字符或竖线字符对齐。用户可以在制表符前自动插入特定字符,如句号或划线等。...
  • ArcGIS图例的设置

    千次阅读 2021-03-20 11:02:09
    按需要设置想要的标题格式及文字。根据向导完成即可。 也可右键图例,点击属性进行修改 若想改变细节或自己设置想要的内容可右键图例,点击转换为图形。 接着右键图例,点击取消分组 则可单独修改某一行
  • 2.14 在标题栏中动态显示时间 66 2.15 在状态栏中显示日期 67 2.16 在状态栏中动态显示时间 68 2.17 在页面指定位置显示时钟 69 2.18 带开关的时钟 70 2.19 节日倒计时 71 2.20 计算未来的时间 73 2.21 显示...
  • 13.9 标题栏显示时间 13.10 超过时间页面自动跳转 13.11 分时段问候用户 13.12 获取服务器时间 13.13 倒计时显示 13.14 背景时钟 13.15 计算某天星期几 13.16 计算时间差 13.17 计算网页停留时间 13.18 记录页面的...
  • 13.9 标题栏显示时间 13.10 超过时间页面自动跳转 13.11 分时段问候用户 13.12 获取服务器时间 13.13 倒计时显示 13.14 背景时钟 13.15 计算某天星期几 13.16 计算时间差 13.17 计算网页停留时间 13.18 记录页面的...
  • 6.36 标题上的跑马灯文字... 191 第7章 网页事件篇.... 193 7.1 进入、离开网页显示信息... 193 7.2 单击和双击鼠标事件... 194 7.3 取得鼠标的按键... 195 7.4 禁止单击鼠标右键... 196 7.5 绝对禁止单击鼠标...
  • 阅读工具 开卷有益

    2012-03-31 14:07:03
    增加:夜间模式下,标题栏文字变暗 2. 增加:设置界面增加日夜模式设置 3. 增加:直接打开ZIP图片格式,无需更名 4. 增加:恢复系统默认主题功能(小说设置|背景字体|菜单|恢复默认主题) 5. 优化:启动速度 6. ...
  • 无边框自定义标题栏窗口 右下角弹出框 程序重启 自定义属性 调用截图DLL 单实例应用 简单的右下角气泡提示 右侧消息通知栏 验证码控件 人脸特征点 使用Threading 背景连线动画 判断信号是否连接 调用虚拟键盘 动态...
  • Excel VBA实用技巧大全 附书源码

    热门讨论 2010-10-08 18:59:24
    01011获取Excel主窗口标题栏的名称 01012获取Excel窗口的状态(大小) 01013获取Excel主窗口的高度和宽度 01014获取Excel主窗口的左边界位置和顶端位置 01015获取在Excel主窗口中一个窗口所能占有的最大高度和宽度 ...
  •  实现三种方式的节点排序功能:节点窗口工具栏中的“向上”和“向下”按钮,节点右键菜单的“下级节点自动排序”,以及点击节点窗口的标题栏排序;  快捷搜索,支持在已有结果中继续搜索,从而实现组合条件的复杂...
  • 网钛文章管理系统不但可以适用于广泛的新闻发布型网站,还适用于淘宝客网站,后续网钛工作室将会扩展功能,但不会往功能全面方向发展,只会往功能通用、操作简单的方向发展,让不懂代码但又想建立自己网站的朋友,...
  • 开卷有益 vb源码

    2015-07-02 17:53:26
    打开成功后,标题栏要按样例程序的式样显示出书名。显示内容进行自动排版以适应当前的窗口宽度和字体大小。  支持背景选取,可以设置成GIF图片图案而非单一色彩,当背景图片小于显示窗口时,必须使用平铺功能以...
  • 4.熟悉Word的功能和特点、运行环境及其启动和退出,掌握Word的窗口组成:标题栏、菜单栏、常用工具栏、文本区、滚动条、状态栏、格式工具栏、按钮。 5.掌握文档的基本操作:创建一个新文档,保存文档,打开文档,...
  • 标题栏可以配置在空间的左边或上边。 文本输入控件 可以通过关键字制定文字种类;当输入指定以外的文字时,自动把平假名、片假名、半角数字、全角数字等变换成指定的文字;还具有自动获得注音符号,以及自动确定...
  • 例如我以chrome插件网站做测试,点选 CSSPeeper 后会开启网站图示、标题和内文字型、CSS 档案大小和载入时间,点选下方按钮可切换至不同功能。 CSSPeeper插件使用方法 3、我认为 CSSPeeper最好用的就是快速列出该...
  • 国家电网水平考试题

    2012-11-09 11:41:39
    页面由2行1列的表格构成(表格宽度为650像素、不显示边框线),在表格的第1行第1列单元格中,插入字幕“国际电力动态”(字幕文字设置为楷体GB_2312、5(18磅)、青色、方向向右、连续、滚动条的表现方式、银白色的...
  • 并可配置是否显示标题八、独创的首页布局支持五种不同的模式:左两右热门文章和投票(3:3:2)、全三(1:1:1)、淘宝客排行榜、淘宝客店铺推荐、淘宝客个性化版,后台可直接设置,一个系统搭建五种网站,满足...
  • 2、Word文档编辑区的右侧有一纵向的滚动条,可对文档页面作上下方向的滚动。 3、Word在正常启动之后会自动打开一个名为文档1的文档。 4、文档窗口中的光标呈现为闪烁的“I”形状。 5、在Word中,如果要对文档内容...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

标题栏文字方向