界面-Android自定义View画笔颜色改变问题(画笔颜色改变了,但是实际上ABCD这些字母的颜色没变)

问题描述

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

肯定都一样啊

解决方案五:

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

时间: 2024-10-30 10:46:41

界面-Android自定义View画笔颜色改变问题(画笔颜色改变了,但是实际上ABCD这些字母的颜色没变)的相关文章

Android自定义View制作仪表盘界面_Android

前言 最近我跟自定义View杠上了,甚至说有点上瘾到走火入魔了.身为菜鸟的我自然要查阅大量的资料,学习大神们的代码,这不,前两天正好在郭神在微信公众号里推送一片自定义控件的文章--一步步实现精美的钟表界面.正适合我这种菜鸟来学习,闲着没事,我就差不多依葫芦画瓢也写了一个自定义表盘View,现在纯粹最为笔记记录下来.先展示下效果图: 下面进入正题 自定义表盘属性 老规矩,先在attrs文件里添加表盘自定义属性 <declare-styleable name="WatchView"&

我的Android进阶之旅------&amp;gt;Android自定义View实现带数字的进度条(NumberProgressBar)

今天在Github上面看到一个来自于 daimajia所写的关于Android自定义View实现带数字的进度条(NumberProgressBar)的精彩案例,在这里分享给大家一起来学习学习!同时感谢daimajia的开源奉献! 第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转载请注明出处! [http://blog.csdn.net/ouyang_peng/article/deta

Android自定义View实现带数字的进度条实例代码_Android

第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 第二步.自定义ProgressBar实现带数字的进度条 0.项目结构 如上图所示:library项目为自定义的带数字的进度条NumberProgressBar的具体实现,demo项目为示例项目以工程依赖的方式引用library项目,然后使用自定义的带数字的进度条NumberProgressBar来做展示   如上图所示:自定义的带数字的进度条的library项目的结构图   如上图所

Android 自定义 view 控件实例

Android自定义view通过继承系统的View并重写部分方法来满足自己的特定需要.首先我们来看一下都有哪些方法可能需要被重写: onMeasure() 检测View组件及其子组件的大小 onLayout() 当该组件需要分配其子组件的位置.大小时 onTouchEvent 当发生触屏事件时 onDraw() 当组件将要绘制它的内容时 onKeyDown 当按下某个键盘时 onKeyUp  当松开某个键盘时 onTrackballEvent 当发生轨迹球事件时 onSizeChange() 当

Android自定义View实现带数字的进度条实例代码

第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 第二步.自定义ProgressBar实现带数字的进度条 0.项目结构 如上图所示:library项目为自定义的带数字的进度条NumberProgressBar的具体实现,demo项目为示例项目以工程依赖的方式引用library项目,然后使用自定义的带数字的进度条NumberProgressBar来做展示 如上图所示:自定义的带数字的进度条的library项目的结构图 如上图所示:de

Android自定义View——自定义搜索框(SearchView)

概述 在Android开发中,当系统数据项比较多时,常常会在app添加搜索功能,方便用户能快速获得需要的数据.搜索栏对于我们并不陌生,在许多app都能见到它,比如豌豆荚 在某些情况下,我们希望我们的自动补全信息可以不只是纯文本,还可以像豌豆荚这样,能显示相应的图片和其他数据信息,因此Android给我们提供的AutoCompleteTextView往往就不够用,在大多情况下我们都需要自己去实现搜索框. 分析 根据上面这张图,简单分析一下自定义搜索框的结构与功能,有  1. 搜索界面大致由三部门组

Android自定义View实现水面上涨效果_Android

实现效果如下: 实现思路: 1.如何实现圆中水面上涨效果:利用Paint的setXfermode属性为PorterDuff.Mode.SRC_IN画出进度所在的矩形与圆的交集实现 2.如何水波纹效果:利用贝塞尔曲线,动态改变波峰值,实现"随着进度的增加,水波纹逐渐变小的效果" 话不多说,看代码. 首先是自定义属性值,有哪些可自定义属性值呢? 圆的背景颜色:circle_color,进度的颜色:progress_color,进度显示文字的颜色:text_color,进度文字的大小:tex

Android自定义View实现照片裁剪框与照片裁剪功能_Android

本文所需要实现的就是这样一种有逼格的效果: 右上角加了个图片框,按下确定可以裁剪正方形区域里的图片并显示在右上角. 实现思路: 1:首先需要自定义一个ZoomImageView来显示我们需要的图片,这个View需要让图片能够以合适的位置展现在当前布局的图片展示区域内(合适的位置值的是:如果图片长度大于屏幕,则压缩图片长度至屏幕宽度,高度等比压缩并居中显示,如果图片高度大于屏幕,则压缩图片高度至屏幕高度,长度等比压缩并居中显示.): 2:然后需要实现这个拖动的框框,该框框实现的功能有四点:拖动.扩

Android自定义View实现折线图效果_Android

下面就是结果图(每种状态用一个表情图片表示): 一.主页面的布局文件如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height=&quo