반응형
이번에는 지난번에 만든 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 |