안 드 로 이 드 사용자 정의 컨트롤 반짝반짝 글꼴 만 들 기

4810 단어 Android발광 글꼴
소개 하 다.
샤 오미 의 부팅 애니메이션 과 환영 인터페이스 에서 우 리 는 이런 반 짝 이 는 유광 글씨 체 를 자주 볼 수 있다.시 크 해 보이 지만 실현 원 리 는 상당히 간단 합 니 다.저 희 는 사용자 정의 컨트롤 을 써 서 TextView 를 계승 한 다음 에 렌 더러 Gradient 를 사용 하여 색상 그 라 데 이 션 과 Paint 의 setShadow Layer 방법 으로 음영 을 설정 한 다음 에 계속 새로 고침 하여 위 치 를 바 꾸 면 됩 니 다.
 

이루어지다
먼저 shineTextView 클래스 를 써 서 TextView 에서 계승 합 니 다.

public class ShineTextView extends TextView
{

  //        
  private LinearGradient mLinearGradient;
  //       
  private RadialGradient mRadialGradient;
  //     
  private Matrix mGradientMatrix;
  //   
  private Paint mPaint;
  private int mViewWidth = 0;
  //       
  private int mTranslate = 0;


  public ShineTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

이 코드 에서 우 리 는 두 개의 색상 렌 더러 를 정의 했다.

//        
private LinearGradient mLinearGradient; 
//       
private RadialGradient mRadialGradient;
Linear Gradient 는 선형 그 라 데 이 션 렌 더 링 으로 색상 의 그 라 데 이 션 이 직선 방향 으로 변화 하 는 것 을 나타 낸다.
우 리 는 LinearGradient 를 사용 하여 위의 두 번 째 그림 의 효 과 를 실현 할 수 있다.

Radial Gradient 는 링 그 라 데 이 션 렌 더 링 으로 색상 의 그 라 데 이 션 이 원 링 으로 변 하 는 것 을 대표 합 니 다.
우 리 는 Radial Gradient 를 사용 하여 위의 첫 번 째 그림 중 소 미터 작 동 애니메이션 의 효 과 를 실현 할 수 있다.

우 리 는 mTranslate 의 밝기 변위 거 리 를 제어 함으로써 색 을 동적 으로 변화 시 키 는 효 과 를 낸다.
OnSizeChanged

@Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh)
  {
    super.onSizeChanged(w, h, oldw, oldh);
    if (mViewWidth == 0 || mViewHeight==0)
    {
      mViewWidth = getMeasuredWidth();
      mViewHeight=getMeasuredHeight();
      if (mViewWidth > 0 || mViewHeight>0 )
      {
        mPaint = getPaint();
         //   RadialGradient   
        //    ,               
        //           
        //    ,   ,           
        mRadialGradient = new RadialGradient(50, 50,30, new int[] {
            0x11FEB726, 0xffFEB726, 0x33FEB726 }, new float[] { 0,
            0.5f, 1 }, Shader.TileMode.CLAMP);

        //   LinearGradient  
        //      (-mViewWidth, 0)     (0,0)
        //    ,                             
        //    ,            
        //             
        //          ,    ,  0-1 
        //       ,      ,    。 
        //           
        // CLAMP            
        // MIRROR                            
        // REPEAT               
        mLinearGradient = new LinearGradient(-mViewWidth, 0, 0, 0,
            new int[] { 0x33ffffff, 0xffffffff, 0x33ffffff },
            new float[] { 0, 0.5f, 1 }, Shader.TileMode.CLAMP);
        mPaint.setShader(mRadialGradient);
        mPaint.setColor(Color.parseColor("#ffffffff"));
        //        
        //            
        //          X       
        //          Y       

        mPaint.setShadowLayer(3, 2, 2, 0xFFFF00FF);
        mGradientMatrix = new Matrix();
      }
    }
  }

OnSizeChange 방법 에서 저 희 는 컨트롤 의 너비 가 높 고 색상 렌 더러 를 초기 화하 고 글꼴 그림자 효 과 를 설정 하 는 등 초기 화 작업 을 수행 합 니 다.
onDraw
다음 마지막 단 계 는 onDraw 방법 에서 효 과 를 그리고 Matrix 행렬 을 통 해 그 라 데 이 션 효 과 를 변위 시 키 면 됩 니 다.

@Override
  protected void onDraw(Canvas canvas)
  {
    super.onDraw(canvas);
    if ( mGradientMatrix != null)
    {
      mTranslateX += mViewWidth / 10;
      mTranslateY += mViewHeight / 10;
      if (mTranslateX > 2 * mViewWidth || mTranslateY >2*mViewHeight)
      {
        mTranslateX = -mViewWidth;
        mTranslateY = -mViewHeight;
      }
      mGradientMatrix.setTranslate(mTranslateX, mTranslateY);

      // mLinearGradient.setLocalMatrix(mGradientMatrix);
      mRadialGradient.setLocalMatrix(mGradientMatrix);
      postInvalidateDelayed(50);
    }
  }

원본 다운로드:http://xiazai.jb51.net/201701/yuanma/AndroidShineText(jb51.net).rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기