Android自定义视图onDraw

Android自定义视图onDraw,android,canvas,view,custom-controls,Android,Canvas,View,Custom Controls,我试图创建一个控件,它是另一个控件的组合。我试过很多方法,但似乎都不管用。。。你问我为什么需要这个?因为 我面临着无法使用创建TextView的问题 阴影和渐变前景的不同颜色 我想做些什么 一个卷文本,它将由这个自定义控件显示 public class MainMenuItem extends View { private MainMenuItemHelper firstLayerItem; private MainMenuItemHelper secondLayerItem;

我试图创建一个控件,它是另一个控件的组合。我试过很多方法,但似乎都不管用。。。你问我为什么需要这个?因为

  • 我面临着无法使用创建TextView的问题 阴影和渐变前景的不同颜色
  • 我想做些什么 一个卷文本,它将由这个自定义控件显示

    public class MainMenuItem extends View {
        private MainMenuItemHelper firstLayerItem;
        private MainMenuItemHelper secondLayerItem;
    
        ...
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            secondLayerItem.draw(canvas);
            firstLayerItem.draw(canvas);
        }
    }
    
    
    public class MainMenuItemHelper extends TextView {
        private List<DrawCommand> commands;
    
        ...
        @Override
        protected void onDraw(Canvas canvas) {
            for (DrawCommand command : commands) {
                command.draw(canvas, getPaint());
                super.onDraw(canvas);
            }
        }
    }
    
    public类MainMenuItem扩展视图{
    private MainMenuItemHelper firstLayerItem;
    private MainMenuItemHelper secondLayerItem;
    ...
    @凌驾
    受保护的void onDraw(画布){
    super.onDraw(帆布);
    第二层绘画(画布);
    第一层绘画(画布);
    }
    }
    公共类MainMenuItemHelper扩展了TextView{
    私有列表命令;
    ...
    @凌驾
    受保护的void onDraw(画布){
    用于(DrawCommand命令:命令){
    draw(canvas,getPaint());
    super.onDraw(帆布);
    }
    }
    }
    
  • 由其他控件组成的控件

    由于视图不能包含其他视图,因此至少需要像
    RelativeLayout
    LinearLayout
    这样的布局。您需要一个
    视图组

    我不知道您想将其放置在何处以及如何放置,但最简单的方法是简单地创建一个包含控件的xml文件,并像通常那样设置它们的样式

    阴影颜色可以由android:shadowColor定义,以便为文本设置阴影


    将文本本身设置为渐变可能非常棘手。

    确定要在循环中调用
    super.onDraw()
    工作
    并不意味着这是一个好主意:)您是否尝试过使用
    ?您对“渐变前景”有何理解?如果你想在文本视图上绘制一些东西,你至少应该先调用
    super.onDraw()
    ,然后再调用你自己的
    前景
    我不明白你想做什么,但是绿色和红色不是很好的可读文本颜色。。。无论如何没有你想要实现的截图,我放弃了。对不起,谢谢!!!!非常感谢。非常感谢。我花了大约5个小时试图解决这个问题,再一次谢谢你!!!!非常感谢。非常感谢。