G_ibsonl 2016-03-11 06:44 采纳率: 0%
浏览 3424

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 2016-03-11 06:47
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100