最近我一直在学习,Android的自定义控件这一部分,虽说谷歌提供了创建混合组件,完全自定义组件等自定义方法,但因为这方面的例子主要设计到的是文本的操作以及关于按钮的简单操作,所以小弟我想了解一下,倘若我自定义一个ImageButton,最优继承的父类是哪一个?还有就是我恐怕要对这个ImageButton进行叠加、旋转、缩小以及去掉边框等操作,又该如何实现呢?
   小弟我先把问题放在这,如果有谁知道满意答案我会把分数给他。我呢,也会在学习自定义控件过程中将取得的进展,不定期发到这个帖子上,希望大家多多关注!

解决方案 »

  1.   

    顶一下
    自己曾重写过Button类,最后遇到点原来Button和自己重写后显示文本重叠及位置调整不对的问题没有解决。
    或许直接自己画个button,不继承其他控件也是一种方法,以前在C++中就是自己直接在window上画的button
      

  2.   

    其实完全可以继承ImageButton,然后自己实现一下绘制的修改。修改为你想要的样式,比如边框等
      

  3.   

    不用继承,直接用个imageview就好了。
      

  4.   

             开始我定义的ImageButton是继承自LinearLayout,不过后来发现要重写Button的好多方法,就直接继承
    ImageButton 。yyy025025025 网友说的很对,ImageButton与imageview唯一的差别可能就是ImageButton能够响应一个事件吧....
            经过这几天代码的编写,一个“旋转”的ImageButton已经实现,不过仅限于Button中,加载图片的旋转(将按钮的背景色设置为透明),如果加载多张图片的话,就很可能又覆盖掉了,所以,若要实现整个ImageButton的旋转,我需要对整个画布进行旋转.....
      

  5.   

    其实个人觉得,继承一个View就OK了,可以用其中的canvas画出你想要的任何东西,功能也可以在这个类中实现,
      

  6.   

         可能是我继承的类有问题吧...不过重新做了一个继承View的,而且对整个画布进行旋转,效果是图片旋转了,但局限于canvas上View限定的区域,图片不能完全显示,而且还要重写其监听事件。
        这是代码:旋转整个canvas 
    public RotateView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
    mBackGroudDrawableId=attrs.getAttributeResourceValue(namespace, "background",R.drawable.qq);
    mBackGroudDrawable = context.getResources().getDrawable(mBackGroudDrawableId);
    mRotateDegrees=attrs.getAttributeFloatValue(namespace, "rotateDegrees",0.0f);
    }
    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mRotateDegrees==90.0f) {
    canvas.rotate(mRotateDegrees, 0, 0);
    canvas.translate(0, -mBackGroundHeight);
    }else{
    canvas.rotate(mRotateDegrees, mBackGroundWidth/2, mBackGroundHeight/2);
    }
    mBackGroudDrawable.setBounds(0, 0, mBackGroundWidth, mBackGroundHeight);
    mBackGroudDrawable.draw(canvas);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    mBackGroundHeight=mBackGroudDrawable.getMinimumHeight();
    mBackGroundWidth=mBackGroudDrawable.getMinimumWidth();

    if (mRotateDegrees==90.0f) {
    setMeasuredDimension(mBackGroundHeight, mBackGroundWidth);
    }else{
    setMeasuredDimension(mBackGroundWidth, mBackGroundHeight);
    }
    }但效果是:  
         那我想知道有没有一种方法,可以使Button旋转,当我单击叠加在一起的Button中某一个Button时(触发的是该Button未被其他Button覆盖的部分),能够响应我所设定事件,并且我要在每个Button上加载我喜欢的背景图片。
          上述,也许只是其中方法的一种(对整个ImageButton旋转),还有一种就是计算每张叠加图片的位置区域,通过一个判断比较的过程来设置响应事件,这种方法比较麻烦,暂时不予考虑.
          希望各位热爱Android的童鞋,可以给我小小的建议....小弟真的不胜感激!!!!!!!
      

  7.   

              事实证明,不论ImageButton还是Imageview都是继承自View类,而View在屏幕上秀的是一个矩形区域,我们没有办法来对这个矩形区域重新定义,除非我们接触Android底层开发,重新定义一个我们想要的View类,当然,那就是相当的有难度了.....呵呵,这个实验到此为止,虽然以失败告终,但我也学到了很多的东西。在此感谢各位的关注,就把分数分给各位吧....
      

  8.   

    按钮叠加时,点击触发区域触发对应按钮这个android已经有了,点击触发时应该可以获取到该按钮的xy,高宽等等,这样就像你重写的ondraw方法一样,在父类重绘之后,在指定的区域画一个图片盖住这个按钮,并通过线程控制这个图片不断的旋转,大概的思路就是这样了,不知道有没有帮助。