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/8234599onDraw()방법 에서 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.