开发者社区> 问答> 正文

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);

}



}

展开
收起
爵霸 2016-03-10 13:31:58 4158 0
1 条回答
写回答
取消 提交回答
  • 你就设置过一次颜色,都是
    paint.setColor(color.custom_yellow);

    肯定都一样啊

    2019-07-17 18:57:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载