編輯:關於android開發
1.實現效果:動態顯示進度(分別顯示了整個的動態改變的過程,然後完成後,彈出一個對話框)
2.實現過程:可以分為繪制一個圓,圓弧和文本三部分,然後在MainAcitivity中通過線程模擬下載進度。
a.定義一個類繼承至view,然後添加其構造函數,記得一定要添加含有Attributset參數的構造函數;
b.定義和初始化一些數據:
private int mCircleXY; private int mWidth; private float mRadius; private Paint mCirclePaint,mArcPaint,mTextPaint; private String mShowText="Android"; private int mTextSize=15; private int mSweepAngle=0;
c.在構造函數中獲取到當前屏幕的寬度,並調用自定義的initView函數
public MyView(Context context, AttributeSet attrs) { super(context, attrs); //獲取屏幕高度 WindowManager manager= (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); mWidth=manager.getDefaultDisplay().getWidth(); initView(); }
d.自定義的函數,主要是完成圓,圓弧和文字的畫筆的定義
public void initView(){ //設置圓心位置和圓的半徑] mCircleXY=mWidth/2; mRadius=(float)(mWidth*0.5)/2; //設置圓的畫筆 mCirclePaint=new Paint(); mCirclePaint.setColor(Color.BLUE); //設置弧的畫筆 mArcPaint=new Paint(); //設置線寬 mArcPaint.setStrokeWidth(60); //設置風格 mArcPaint.setStyle(Paint.Style.STROKE); //設置顏色 mArcPaint.setColor(Color.BLUE); //設置文字畫筆 mTextPaint=new Paint(); mTextPaint.setColor(Color.WHITE); mTextPaint.setTextSize(mTextSize); mTextPaint.setTextAlign(Paint.Align.CENTER); }
e.在onDraw函數中繪制圓,圓弧和文字:
protected void onDraw(Canvas canvas) { super.onDraw(canvas); //繪制矩陣 //這裡分別設置了矩陣的左,上,右,下的位置 RectF mArcRectF=new RectF((float)(mWidth*0.1),(float)(mWidth*0.1),(float)(mWidth*0.9),(float)(mWidth*0.9)); //繪制圓 canvas.drawCircle(mCircleXY,mCircleXY,mRadius,mCirclePaint); //繪制弧線 /* * 第一個參數為上面構建的矩陣,實際上可以理解為在規定的矩陣內畫弧線 * 第二參數為開始畫的角度,這裡設置為270 * 第三個參數為結束的角度 *這裡一般設置為false,如果為true的話,它會顯示出圓弧的半徑,直到繪制完成後,才會消失 * 最後一個參數為我們設置的畫筆 * */ canvas.drawArc(mArcRectF,270,mSweepAngle,false,mArcPaint); //繪制文本 /* * 第一個參數為我們顯示內容 * 第二參數為開始顯示的位置 * 第三個參數為結束顯示的位置 * 第四個參數為文本顯示的x軸位置,後者為y軸的位置 * 最後一個參數為我們定義的畫筆 * */ canvas.drawText(mShowText,0,mShowText.length(),mCircleXY,mCircleXY+(mTextSize/4),mTextPaint); }View Code
f.自定義兩個函數,用來在其他地方動態改變角度和文字:
public void setSweepAngle(int sweepValue){ if (sweepValue!=0){ mSweepAngle=sweepValue; }else{ mSweepAngle=0; } //注意這裡要添加,刷新 invalidate(); } public void setShowText(String text){ if (!text.equals("")){ mShowText=text; }else{ mShowText="Android"; } invalidate(); }
g.在布局文件中引用:
<main.view.com.myview.MyView android:id="@+id/myView" android:layout_width="match_parent" android:layout_height="match_parent" />
h.在MainActivity中的實現:
package main.view.com.myview; import android.content.DialogInterface; import android.os.Handler; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { private MyView myView; private int mAngle=0; private float current=0; Handler handler=new Handler(); Runnable runnable=new Runnable() { @Override public void run() { //轉換為百分制 current=(float)mAngle/360*100; //分別設置角度和文字 myView.setShowText("當前所在比例為:"+(int)current); myView.setSweepAngle(mAngle); mAngle=mAngle+20; if (mAngle<=360){ //當沒有完成的話,3秒後再次運行該線程 handler.postDelayed(runnable,3000); }else{ //完成後,彈出對話框 AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); builder.setMessage("下載完成!").setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myView= (MyView) findViewById(R.id.myView); handler.post(runnable); } }View Code
Linux2.6內核協議棧系列--TCP協議1.發送,linux2.6--tcp在介紹tcp發送函數之前得先介紹很關鍵的一個結構sk_buff,在linux中,sk_bu
docker的跨主機解決方案weave----遇到的坑(1)在weave的1.2版本之後,考慮到原先sleeve模式的網絡性能很差,增加了fastdp的模式,該模式是we
Linux內核系列—7.操作系統開發之中斷和異常,linux內核a.概述 中斷門和陷阱門的作用機理幾乎是一樣的,只不過使用調用門時使用call指令,而這裡我們使用int指
硅谷社交8--聯系人列表頁面,硅谷社交8--聯系人 1.是否有邀請信息紅點的設置 // 獲取當前是否有新的邀請信息 boolean is_notify = SpUtil