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个回答

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 年多之前 回复
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 年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android自定义控件画笔Paint介绍
画笔Paint我们总用到,现在介绍一下API,给自己保留复习一下                  Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,        样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,        大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。                 1.图形绘制   
调整MFC中VIew中的画笔的颜色,并应用;;
void CChildView::OnLButtonUp(UINT nFlags, CPoint point) { CPen myPen1(PS_DASHDOTDOT, 1, RGB(255, 200, 0)); CClientDC dc(this); CPen* pOldPen = dc.SelectObject(&myPen1); dc.MoveTo(m_ptOrign); dc.
android项目 之 记事本(10) ----- 手写功能之设置画笔大小和画笔颜色
android实现手写功能中的设置画笔的大小和颜色的功能,这样,就可以用不同颜色,不同大小的画笔书写字。
Android渐变色画笔 自定义View渐变色
Android开发中用到渐变色背景场景很多也很容易实现。在res/drawable目录下添加一个xml文件(命名不限)里面的内容大体如下 <gradient android:startColor="#FFFFFF” android:endColor="#00FFF0" android:angle="45" /> 然后在View控件
Android 自定义View的一些总结
Android 自定义View的一些总结 Paint与Canvas 下面先说下Paint的基本设置函数: paint.setAntiAlias(true);//抗锯齿功能 paint.setColor(Color.RED); //设置画笔颜色 paint.setStyle(Style.FILL);//设置填充样式 paint.setStrokeWidth(30);//设置画笔宽度 p
如何解决在GDI画图中,多次修改画笔的颜色
定义了一个画笔,想在画中途改变颜色,应该如何处理
自定义View之RGB颜色变化Paint画笔颜色过滤器setColorFilter,LightingColorFilter光照过滤器
首先看一下效果: 通过来给RGB改变不同的值,图片出现不同的变化,其中负值代表削弱相应的颜色,正值代表加强相应的颜色。下面给出主要步骤,下边会贴源码 主要步骤: 1.创建一个类继承自View,重写onDraw方法 2.创建画笔 3.下面给画笔创建着色器: 什么是着色器,在通常情况下,我们会给画笔设置颜色setColor,现在我们不想给画笔设置单一的颜色,想设置更炫酷的效
CPen改变画线的颜色
CClientDC dc(this); <br />CPen m_pen(PS_SOLID,1,RGB(255,0,0)); <br />CPen *p=dc.SelectObject(&m_pen); <br />dc.MoveTo(0,0); <br />dc.LineTo(100,100); <br />dc.SelectObject(p);Top<br /> 
mfc中使用不同的画笔来绘制图形
画笔是用来绘制点,线和图形的对象。MFC的CPen类封装了windowsGDI画笔,通过它,可以定义CDC类所绘制图形的边线风格,线宽和颜色。 首先给出实例的demo 要实现这些功能,我们需要在Ondraw中定义画笔,并通过SelectObject来选择画笔 具体代码如下: void CMFCApplication15View
android项目 之 记事本(9) ----- 画板功能之橡皮擦、画笔大小和画笔颜色
android实现画板中的橡皮擦,设置画笔大小,设置画笔颜色的功能,并设置画笔的图标随着路径一起动,完善了记事本中的画板的所有功能。