Android 사용자 정의 View 의 테두리 텍스트,반 짝 이 는 빛 텍스트

기 존 컨트롤 확장
1.다음 과 같은 2 층 배경 을 그 리 는 TextView

BorderTextView 계승 TextView 만 들 기
구조 함수 에서 기본 데 이 터 를 초기 화 합 니 다.

 //   
    mPaint1 = new Paint();
    mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_bright));
    //     ,  
    mPaint1.setStyle(Paint.Style.FILL);


    //   
    mPaint2 = new Paint();
    mPaint2.setColor(Color.YELLOW);
    mPaint2.setStyle(Paint.Style.FILL);

onDraw()방법 을 다시 쓰 는데 이 방법 은 주로 canvas 대상 을 통 해 그림 을 그립 니 다.

 @Override
  protected void onDraw(Canvas canvas) {

    //      
    canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1);

    //      
    canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2);

    canvas.save();//       

    //    10px
    canvas.translate(10,10);

    //        ,       ,       
    super.onDraw(canvas);
    //      ,        

    canvas.restore();//       

  }
위 에서 끝 난 후에 실행 하면 문자 가 완전히 표시 되 지 않 는 것 을 발견 할 수 있 습 니 다.왜냐하면 우리 가 문 자 를 평평 하 게 옮 긴 후에 문자 자체 의 크기 가 변 하지 않 아서 문자 표시 가 완전 하지 않 기 때 문 입 니 다.우 리 는 onMeasure()방법 을 다시 불 러 와 TextView 의 너비 와 높이 를 다시 계산 해 야 합 니 다.

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //       TextView        ,          10*2
    setMeasuredDimension(getMeasuredWidth()+20,getMeasuredHeight()+20);
  }

요약:
1.onMeasure()방법 은 컨트롤 크기 를 결정 하고 onDraw()방법 은 그립 니 다.
2.setMeasured Dimension(width,height)설정 컨트롤 의 너비
2.반 짝 이 는 글

이 는 주로 LinearGradient 선형 렌 더 링 대상 을 통 해 색상 변 화 를 실현 합 니 다.
onSizeChanged()방법 에서 초기 화 작업 을 진행 합 니 다.

 @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    if(mViewWidth==0){
      mViewWidth = getMeasuredWidth();

      if(mViewWidth>0){
        mPaint = getPaint();
        mLinearGradient = new LinearGradient(0,0,mViewWidth,0,
                new int[]{Color.BLUE,0XFFFFFFFF,Color.BLUE},
                null,
            Shader.TileMode.CLAMP
            );

        mPaint.setShader(mLinearGradient);
        mGradientMatrix = new Matrix();
      }
    }
  }

텍스트 의 크기 를 가 져 오고 이 텍스트 의 Paint 대상 을 가 져 오 며 LinearGradient 대상 을 초기 화 합 니 다.
LinearGradient 를 만 들 고 그 라 데 이 션 색상 배열 을 설정 합 니 다.

public LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile); 
//    ,                             
//    ,            
//             
//          ,    ,  0-1 new float[] {0.25f, 0.5f, 0.75f, 1 } 
//       ,      ,    。 
//           
// CLAMP            
// MIRROR                            
// REPEAT              
매트릭스 대상 초기 화.이 대상 은 주로 렌 더러 의 값 을 바 꾸 는 데 사 용 됩 니 다.구체 적 인 설명 은 이 블 로 그 를 보십시오http://blog.csdn.net/flash129/article/details/8234599
onDraw()방법 에서 Matrix 대상 을 바 꾸 고 렌 더러 에 설정 하 며 새로 고침 시 도 를 하여 순환 을 형성 합 니 다.

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(mGradientMatrix!=null){
      mTranslate += mViewWidth/5;

      //                   ,     
      if(mTranslate>2*mViewWidth){
        mTranslate = - mViewWidth;
      }
      mGradientMatrix.setTranslate(mTranslate,0);
      mLinearGradient.setLocalMatrix(mGradientMatrix);

      //100ms        ,   onDraw()  。
      postInvalidateDelayed(100);
    }
  }

요약:
1.Linear Gradient 를 통 해 그림 의 그 라 데 이 션 색 을 설정 합 니 다.
2.Matrix 그 라 데 이 션 색상 변경 대상
사용자 정의 View 의 원본 코드 가 github 에 업로드 되 었 습 니 다.원본 코드 가 필요 하 시 면 이동 하 십시오https://github.com/AlexSmille/CustomView
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기