android-circlebutton介绍

Posted wuhongqi0012

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android-circlebutton介绍相关的知识,希望对你有一定的参考价值。

转载来自:http://blog.csdn.net/wangjinyu501/article/details/22160509
版本:2.0   日期:2014.3.21  2014.3.28   版权:©  2014 kince 转载注明出处
      android-circlebutton 是github上的一个开源项目,正如它的简介一样:Circle button widget for android,就是一个圆形的button。它与一般圆形的button不同之处在于它是画出来的,属于自定义UI的范畴,因此我拿来介绍一下,而们平常一般使用的button可能是来自于美工的图片。它的好处是节省了资源空间,当然缺点也很明显开发人员也要参与界面设计这块了。其实这样也不能说不好,反过来想减少了对美工的依赖,而且也比较适合开发人员自己去实现一些扁平化的东西,因为它很简洁。   首先看代码, [html]  view plain copy
  1. package com.example.circlebutton;  
  2.   
  3. import android.animation.ObjectAnimator;  
  4. import android.content.Context;  
  5. import android.content.res.TypedArray;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Paint;  
  9. import android.util.AttributeSet;  
  10. import android.util.TypedValue;  
  11. import android.widget.ImageView;  
  12.   
  13. public class CircleButton extends ImageView   
  14.   
  15.      private static final int PRESSED_COLOR_LIGHTUP = 255 / 25;  
  16.      private static final int PRESSED_RING_ALPHA = 75;  
  17.      private static final int DEFAULT_PRESSED_RING_WIDTH_DIP = 4;  
  18.      private static final int ANIMATION_TIME_ID = android.R.integer.config_shortAnimTime;  
  19.   
  20.      private int centerY;  
  21.      private int centerX;  
  22.      private int outerRadius;  
  23.      private int pressedRingRadius;  
  24.   
  25.      private Paint circlePaint;  
  26.      private Paint focusPaint;  
  27.   
  28.      private float animationProgress;  
  29.   
  30.      private int pressedRingWidth;  
  31.      private int defaultColor = Color.BLACK;  
  32.      private int pressedColor;  
  33.      private ObjectAnimator pressedAnimator;  
  34.   
  35.      public CircleButton(Context context)   
  36.           super(context);  
  37.           init(context, null);  
  38.        
  39.   
  40.      public CircleButton(Context context, AttributeSet attrs)   
  41.           super(context, attrs);  
  42.           init(context, attrs);  
  43.        
  44.   
  45.      public CircleButton(Context context, AttributeSet attrs, int defStyle)   
  46.           super(context, attrs, defStyle);  
  47.           init(context, attrs);  
  48.        
  49.   
  50.      @Override  
  51.      public void setPressed(boolean pressed)   
  52.           super.setPressed(pressed);  
  53.   
  54.           if (circlePaint != null)   
  55.                circlePaint.setColor(pressed ? pressedColor : defaultColor);  
  56.             
  57.   
  58.           if (pressed)   
  59.                showPressedRing();  
  60.            else   
  61.                hidePressedRing();  
  62.             
  63.        
  64.   
  65.      @Override  
  66.      protected void onDraw(Canvas canvas)   
  67.           canvas.drawCircle(centerX, centerY, pressedRingRadius + animationProgress, focusPaint);  
  68.           canvas.drawCircle(centerX, centerY, outerRadius - pressedRingWidth, circlePaint);  
  69.           super.onDraw(canvas);  
  70.        
  71.   
  72.      @Override  
  73.      protected void onSizeChanged(int w, int h, int oldw, int oldh)   
  74.           super.onSizeChanged(w, h, oldw, oldh);  
  75.           centerX = w / 2;  
  76.           centerY = h / 2;  
  77.           outerRadius = Math.min(w, h) / 2;  
  78.           pressedRingRadius = outerRadius - pressedRingWidth - pressedRingWidth / 2;  
  79.        
  80.   
  81.      public float getAnimationProgress()   
  82.           return animationProgress;  
  83.        
  84.   
  85.      public void setAnimationProgress(float animationProgress)   
  86.           this.animationProgress = animationProgress;  
  87.           this.invalidate();  
  88.        
  89.   
  90.      public void setColor(int color)   
  91.           this.defaultColor = color;  
  92.           this.pressedColor = getHighlightColor(color, PRESSED_COLOR_LIGHTUP);  
  93.   
  94.           circlePaint.setColor(defaultColor);  
  95.           focusPaint.setColor(defaultColor);  
  96.           focusPaint.setAlpha(PRESSED_RING_ALPHA);  
  97.   
  98.           this.invalidate();  
  99.        
  100.   
  101.      private void hidePressedRing()   
  102.           pressedAnimator.setFloatValues(pressedRingWidth, 0f);  
  103.           pressedAnimator.start();  
  104.        
  105.   
  106.      private void showPressedRing()   
  107.           pressedAnimator.setFloatValues(animationProgress, pressedRingWidth);  
  108.           pressedAnimator.start();  
  109.        
  110.   
  111.      private void init(Context context, AttributeSet attrs)   
  112.           this.setFocusable(true);  
  113.           this.setScaleType(ScaleType.CENTER_INSIDE);  
  114.           setClickable(true);  
  115.   
  116.           circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
  117.           circlePaint.setStyle(Paint.Style.FILL);  
  118.   
  119.           focusPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
  120.           focusPaint.setStyle(Paint.Style.STROKE);  
  121.   
  122.           pressedRingWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_PRESSED_RING_WIDTH_DIP, getResources()  
  123.                     .getDisplayMetrics());  
  124.   
  125.           int color = Color.BLACK;  
  126.           if (attrs != null)   
  127.                final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleButton);  
  128.                color = a.getColor(R.styleable.CircleButton_cb_color, color);  
  129.                pressedRingWidth = (int) a.getDimension(R.styleable.CircleButton_cb_pressed_ring_width, pressedRingWidth);  
  130.                a.recycle();  
  131.             
  132.   
  133.           setColor(color);  
  134.   
  135.           focusPaint.setStrokeWidth(pressedRingWidth);  
  136.           final int JS 实现等腰三角形(空心)和(实心)

    Scratch考级99图图39-等级考scratch 画实心圆scratch画实心圆

    爱心+实心圆+空心圆

    eclipse

    如何画类图 怎样把空心菱形变成实心菱形

    实心圆的中点圆算法