2 g ibsonl G_ibsonl 于 2016.03.11 14:44 提问

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

}

5个回答

G_ibsonl
G_ibsonl   2016.03.11 14:47

图片说明就是不变颜色啊,求大神告诉下问题

bdmh
bdmh   Ds   Rxr 2016.03.11 14:51

你的ondraw事件里
paint.setColor(color.custom_yellow);
都写死了啊

G_ibsonl
G_ibsonl 我想要的就是默认黄色,但是他还是黑色。
接近 2 年之前 回复
luochoudan
luochoudan   Ds   Rxr 2016.03.11 16:34

这颜色都没变吧

 if(i==choice-1){
    paint.setColor(color.custom_yellow);
    paint.setTextSize(32);
}else{
    paint.setColor(color.custom_yellow);
    paint.setTextSize(textSize);

}
G_ibsonl
G_ibsonl 那按道理来说应该是我设置的黄色,但是实际上一直都是黑色的。
接近 2 年之前 回复
qq_32969313
qq_32969313   2016.03.11 16:48

同上,你就设置过一次颜色,都是
paint.setColor(color.custom_yellow);

肯定都一样啊

G_ibsonl
G_ibsonl   2016.03.14 14:09

我现在代码实现的效果就是,默认黑色。然后手去滑动会变颜色和字体大小。 但是现在需要的是改变他的默认颜色。
把黑色改为黄色。我代码故意设死了黄色。但是他还是黑色

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!