亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android自定義控件實現(xiàn)UC瀏覽器語音搜索效果

 更新時間:2017年04月22日 14:26:33   作者:ludi  
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實現(xiàn)UC瀏覽器語音搜索效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

 最近項目上要實現(xiàn)語音搜索功能,界面樣式要模仿一下UC瀏覽器的樣式,UC瀏覽器中有一個控件,會隨著聲音大小浮動,然后尋思偷個懶,百度一下,結(jié)果也沒有找到類似的,只能自己動手了。

先上圖看我實現(xiàn)的效果:

這是自定義控件的代碼,里面注釋也很明白,就不費話了

public class CustomCircleView extends View{
  private Paint mPaint;
  private int strokeWidth = 0;   //圓環(huán)的寬度
  private Bitmap bitmap = null;  // 圖片位圖
  private int nBitmapWidth = 0;  // 圖片的寬度
  private int nBitmapHeight = 0; // 圖片的高度
  private int width;     //view的寬度
  private int height ;    //view的高度
  private int bigCircleColor =0;    //view的高度
  private int floatCircleColor =0;    //view的高度

  public CustomCircleView(Context context) {
    this(context, null);
  }

  public CustomCircleView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public CustomCircleView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomCircleView, defStyleAttr, 0);
    int n = a.getIndexCount();

    for (int i = 0; i < n; i++)
    {
      int attr = a.getIndex(i);
      switch (attr)
      {
        case R.styleable.CustomCircleView_icon:
          bitmap = BitmapFactory.decodeResource(getResources(), a.getResourceId(attr, 0));
          break;
        case R.styleable.CustomCircleView_bigCircleColor:
          bigCircleColor = a.getColor(attr, Color.GRAY);
          break;
        case R.styleable.CustomCircleView_floatCircleColor:
          floatCircleColor = a.getColor(attr,Color.GREEN);
          break;
      }
    }
    a.recycle();

    mPaint = new Paint();
    //如果布局中沒有設(shè)置bigCircleColor和floatCircleColor的時候給他一個默認(rèn)值
    if (bigCircleColor==0){
      bigCircleColor=Color.parseColor("#FFEEF0F1");
    }
    if (floatCircleColor==0){
      floatCircleColor=Color.parseColor("#25c1f5");
    }
    // 獲取圖片高度和寬度
    nBitmapWidth = bitmap.getWidth();
    nBitmapHeight = bitmap.getHeight();
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    //獲取view的高度和寬度 這個view必須給精確值?。。。。。。?!
    if (widthMode == MeasureSpec.EXACTLY) {
      width = widthSize;
    }
    if (heightMode == MeasureSpec.EXACTLY)
    {
      height = heightSize;
    }
    setMeasuredDimension(width, height);
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mPaint.setAntiAlias(true); // 消除鋸齒
    //繪制最外層灰色大圓
    mPaint.setColor(bigCircleColor);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeWidth(height/2-nBitmapHeight/2);
    //計算圓的半徑稍微麻煩點,但是在圖上畫一下應(yīng)該能明白 (height/2-nBitmapHeight/2)/2+nBitmapHeight/2
    canvas.drawCircle(width/2, height/2, (height/2-nBitmapHeight/2)/2+nBitmapHeight/2, mPaint);

    //繪制浮動的圓
    mPaint.setColor(floatCircleColor);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeWidth(strokeWidth);
    canvas.drawCircle(width/2, height/2, strokeWidth/2+nBitmapHeight/2, mPaint);

    //繪制中間圖標(biāo)
    canvas.drawBitmap(bitmap, width/2-nBitmapWidth/2, height/2-nBitmapHeight/2, mPaint);


  }
  //根據(jù)傳入的寬度重新繪制
  public void setStrokeWidth(int with){
    this.strokeWidth=with;
    invalidate();
  }
}

在res/values 下建一個attrs文件 代碼:

<resources>
  <declare-styleable name="CustomCircleView">
    <attr name="bigCircleColor" format="color" />
    <attr name="floatCircleColor" format="color" />
    <attr name="icon" format="reference" />
  </declare-styleable>
</resources>

在布局中的使用:

<com.example.administrator.mycustomcircleview.CustomCircleView
  android:id="@+id/customView"
  android:layout_width="200dp"
  android:layout_height="200dp"
  android:layout_gravity="center"
  app:icon="@mipmap/voice_icon"
  app:floatCircleColor="@color/colorAccent"
  app:bigCircleColor="@color/colorPrimaryDark"
  />


高度寬度一定要給精確值,切記?。。?!顏色值可以不設(shè)定,默認(rèn)就是我上面圖的效果。
然后根據(jù)音量大小直接傳入數(shù)值就可以了,很簡單的使用方法,這里我用隨機數(shù)代替了。

customView = ((CustomCircleView) findViewById(R.id.customView));
  button = ((Button) findViewById(R.id.button));
  button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
  Random random=new Random();
  customView.setStrokeWidth(random.nextInt(100));
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android Studio3.0升級后使用注意事項及解決方法

    Android Studio3.0升級后使用注意事項及解決方法

    這篇文章主要介紹了Android Studio3.0升級后使用注意事項及解決方法,需要的朋友參考下吧
    2017-12-12
  • Android操作系統(tǒng)的架構(gòu)設(shè)計分析

    Android操作系統(tǒng)的架構(gòu)設(shè)計分析

    這篇文章主要介紹了Android操作系統(tǒng)的架構(gòu)設(shè)計分析,Android系統(tǒng)架構(gòu)分為Linux內(nèi)核驅(qū)動、C/C ++框架、Java框架、Java應(yīng)用程序,本文分別講解了它的作用,需要的朋友可以參考下
    2015-06-06
  • Android數(shù)據(jù)持久化之File機制分析

    Android數(shù)據(jù)持久化之File機制分析

    這篇文章主要介紹了Android數(shù)據(jù)持久化之File機制,較為詳細(xì)的分析了File機制的原理及Android使用File實現(xiàn)數(shù)據(jù)持久化的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • android手機獲取唯一標(biāo)識的方法

    android手機獲取唯一標(biāo)識的方法

    這篇文章主要 為大家詳細(xì)介紹了android手機獲取唯一標(biāo)識的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android 路徑查詢具體實現(xiàn)

    Android 路徑查詢具體實現(xiàn)

    可以通過RasterMap的getDirection()方法來查詢路徑,和查詢地址類似,路徑查詢的結(jié)果也是通過回調(diào)函數(shù)的方式來通知應(yīng)用程序的,下面的例子返回南京到北京的路徑
    2013-10-10
  • Android圖片加載庫Glide用法

    Android圖片加載庫Glide用法

    大家好,本篇文章主要講的Android圖片加載庫Glide用法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android實現(xiàn)短信加密功能(發(fā)送加密短信、解密本地短信)

    Android實現(xiàn)短信加密功能(發(fā)送加密短信、解密本地短信)

    這篇文章主要介紹了android實現(xiàn)短信加密功能的相關(guān)資料,功能包括發(fā)送加密短信、解密本地短信,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Android TouchListener實現(xiàn)拖拽刪實例代碼

    Android TouchListener實現(xiàn)拖拽刪實例代碼

    這篇文章主要介紹了Android TouchListener實現(xiàn)拖拽刪實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 解析Android中webview和js之間的交互

    解析Android中webview和js之間的交互

    本篇文章是對Android中webview和js之間的交互進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • Android對話框AlertDialog詳解

    Android對話框AlertDialog詳解

    本文詳細(xì)講解了Android對話框AlertDialog的實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論