问题描述
- Android自定义View画笔颜色改变问题(画笔颜色改变了,但是实际上ABCD这些字母的颜色没变)
-
package com.eage.tbw.view;import com.eage.tbw.R;
import com.eage.tbw.R.color;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;/**
- A-Z字母的View
- lxm
*/
public class LetterView extends View {
private static final String[] LETTER=new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"};private Paint paint;
private int textSize;
private int choice;private TextView outerTV;
private LetterOnTouchCallBack letterOnTouchCallBack;
public void setTextView(TextView textView){
outerTV=textView;}
public LetterView(Context context) {
this(context, null);
}public LetterView(Context context, AttributeSet attrs) {
this(context, attrs, 0);}
public LetterView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray=context.getTheme().obtainStyledAttributes(attrs, R.styleable.LetterView, defStyleAttr, 0);textSize=typedArray.getInt(R.styleable.LetterView_text, 27); typedArray.recycle(); initView();
}
private void initView() {
paint=new Paint();paint.setTextSize(textSize); paint.setColor(color.custom_yellow); paint.setAntiAlias(true); choice=-1;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);int height=getHeight(); int width=getWidth(); int length=LETTER.length; int itemHeigth=height/length; for(int i=0;i<length;i++){ if(i==choice-1){ paint.setColor(color.custom_yellow); paint.setTextSize(32); }else{ paint.setColor(color.custom_yellow); paint.setTextSize(textSize); } float y=(i+1)*itemHeigth; float x=(width-paint.measureText(LETTER[i]))/2; canvas.drawText(LETTER[i], x, y, paint); }
}
//重写触摸事件
@Override
public boolean dispatchTouchEvent(MotionEvent event) {final LetterOnTouchCallBack callBack = letterOnTouchCallBack; float y=event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_UP: choice=-1; if(outerTV!=null){ outerTV.setVisibility(View.GONE); } setBackgroundColor(Color.WHITE); invalidate(); break; default: int length=LETTER.length; int position= (int) (y/getHeight()*LETTER.length); setBackgroundColor(Color.parseColor("#E5E5E5")); if(1<=position&&position<=length){ //将选中的字母传回到MainActivity中 if(callBack!=null){ callBack.onTouchingLetterChanged(LETTER[position-1]); } if(outerTV!=null){ outerTV.setText(LETTER[position-1]); outerTV.setVisibility(View.VISIBLE); } choice=position; invalidate(); } break; } return true;
}
// 设置监听
public void setOnLetterCallBack(LetterOnTouchCallBack letterOnTouchCallBack) { this.letterOnTouchCallBack = letterOnTouchCallBack; } //接口 public interface LetterOnTouchCallBack { public void onTouchingLetterChanged(String s); }
}
解决方案
解决方案二:
你的ondraw事件里
paint.setColor(color.custom_yellow);
都写死了啊
解决方案三:
这颜色都没变吧
if(i==choice-1){
paint.setColor(color.custom_yellow);
paint.setTextSize(32);
}else{
paint.setColor(color.custom_yellow);
paint.setTextSize(textSize);
}
解决方案四:
同上,你就设置过一次颜色,都是
paint.setColor(color.custom_yellow);
肯定都一样啊
解决方案五:
我现在代码实现的效果就是,默认黑色。然后手去滑动会变颜色和字体大小。 但是现在需要的是改变他的默认颜色。
把黑色改为黄色。我代码故意设死了黄色。但是他还是黑色