반응형
![]() |
![]() |
이번에는 지난번에 만든 WheelView에서
선택된 값의 위와 아래에 각각 그라데이션 효과를 적용해보겠습니다.
추가한 wheelview 모듈 package com.wx.wheelview.widget에서
WheelView.java을 수정합니다.
WheelView.java
private void refreshTextView(int position, int curPosition, View
itemView, TextView textView) {
// textView 리셋
textView.getPaint().reset();
if (curPosition == position) { // 选中
Log.d("setTextView", position + ", " + curPosition + ", " + textView.getText());
int textColor = mStyle.selectedTextColor != -1 ? mStyle
.selectedTextColor : (mStyle.textColor != -1 ? mStyle
.textColor : WheelConstants.WHEEL_TEXT_COLOR);
float defTextSize = mStyle.textSize != -1 ? mStyle.textSize :
WheelConstants.WHEEL_TEXT_SIZE;
float textSize = mStyle.selectedTextSize != -1 ? mStyle
.selectedTextSize : (mStyle.selectedTextZoom != -1 ?
(defTextSize * mStyle.selectedTextZoom) :
defTextSize);
boolean textBold = mStyle.selectedTextBold;
setTextView(itemView, textView, textColor, textSize, 1.0f, textBold);
} else if (curPosition > position){ // 未选中
Log.d("setTextViewGradient2", position + ", " + curPosition + ", " + textView.getText());
int textColor = mStyle.textColor != -1 ? mStyle.textColor :
WheelConstants.WHEEL_TEXT_COLOR;
float textSize = mStyle.textSize != -1 ? mStyle.textSize :
WheelConstants.WHEEL_TEXT_SIZE;
int delta = Math.abs(position - curPosition);
float alpha = (float) Math.pow(mStyle.textAlpha != -1 ? mStyle.textAlpha :
WheelConstants
.WHEEL_TEXT_ALPHA, delta);
setTextViewGradientTop(itemView, textView, textColor, textSize, alpha, false);
} else if (curPosition < position){
Log.d("setTextViewGradient", position + ", " + curPosition + ", " + textView.getText());
int textColor = mStyle.textColor != -1 ? mStyle.textColor :
WheelConstants.WHEEL_TEXT_COLOR;
float textSize = mStyle.textSize != -1 ? mStyle.textSize :
WheelConstants.WHEEL_TEXT_SIZE;
int delta = Math.abs(position - curPosition);
float alpha = (float) Math.pow(mStyle.textAlpha != -1 ? mStyle.textAlpha :
WheelConstants
.WHEEL_TEXT_ALPHA, delta);
setTextViewGradientBottom(itemView, textView, textColor, textSize, alpha, false);
}
}
값이 변경될때 새로 텍스트 뷰를 설정하는 refreshTextView()에서
curPosition와 position에 따라 현재 선택된 값보다 위치가 높은뷰와 아래뷰일때
각각 그라데이션 효과를 지정할 수 있도록
setTextViewGradientTop()와 setTextViewGradientBottom()를 추가합니다.
// 선택된 일반 텍스트 뷰
private void setTextView(View itemView, TextView textView, int textColor, float textSize,
float textAlpha, boolean textBold) {
textView.setTextColor(textColor);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
itemView.setAlpha(textAlpha);
try {
textView.getPaint().setFakeBoldText(textBold);
} catch (Exception e) {
e.printStackTrace();
}
}
// 하단 그라데이션 효과 적용
private void setTextViewGradientBottom(View itemView, TextView textView, int textColor, float textSize,
float textAlpha, boolean textBold) {
textView.setTextColor(textColor);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
itemView.setAlpha(textAlpha);
// 그라데이션
Shader shader = new LinearGradient(0,0,0,textView.getLineHeight(),
Color.BLACK, Color.WHITE, Shader.TileMode.REPEAT);
textView.getPaint().setShader(shader);
try {
textView.getPaint().setFakeBoldText(textBold);
} catch (Exception e) {
e.printStackTrace();
}
}
// 상단 그라데이션 효과 적용
private void setTextViewGradientTop(View itemView, TextView textView, int textColor, float textSize,
float textAlpha, boolean textBold) {
textView.setTextColor(textColor);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
itemView.setAlpha(textAlpha);
// 그라데이션
Shader shader = new LinearGradient(0,0,0,textView.getLineHeight(),
Color.WHITE, Color.BLACK, Shader.TileMode.REPEAT);
textView.getPaint().setShader(shader);
try {
textView.getPaint().setFakeBoldText(textBold);
} catch (Exception e) {
e.printStackTrace();
}
}
반응형
'개발 > ANDROID 안드로이드' 카테고리의 다른 글
Java 네이버 지도 호출 및 경로 안내 (0) | 2023.07.18 |
---|---|
Java 카카오 내비 호출 및 경로 안내 (0) | 2023.07.18 |
안드로이드 WheelView 휠 뷰 적용하기 (1) | 2022.09.21 |
Android Meterial DropDown Menu 샘플 (1) | 2022.09.21 |
android.util.Base64와 java.util.Base64의 차이점 (0) | 2022.09.16 |