<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                嗯。。再差1篇就可以獲得持之以恒徽章了,今天帶大家畫一個比較簡單的view。 轉載請注明出處:http://blog.csdn.net/wingichoy/article/details/50477108 廢話不多說,看效果圖: ![](https://box.kancloud.cn/2016-03-21_56efaea3e29b9.jpg) 首先 構造函數 測量... 這里就一筆帶過了。? ~~~ public ErrorView(Context context) { this(context, null); } public ErrorView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ErrorView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSize = MeasureSpec.getSize(widthMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); if (widthMode == MeasureSpec.EXACTLY) { mWidth = widthSize; } else { mWidth = 200; } if (heightMode == MeasureSpec.EXACTLY) { mHeight = heightSize; } else { mHeight = 200; } setMeasuredDimension(mWidth, mHeight); } ~~~ 如果你看不懂上面這些,翻翻我的這一篇博客,有一些補充的知識點。[圓形百分比view](http://blog.csdn.net/wingichoy/article/details/50334595) 接下來draw,如果讓你繪制一個靜態的這個突然,你一定閉著眼也能畫出來。。那么怎么才能實現動態的效果呢。。 其實就是模仿手繪的過程,我們是一點一點畫出來的,一條線的逐漸延遲。 ?那我們就來模仿這個自然的過程。 首先畫一個圓形。 ~~~ Paint p = new Paint(); p.setStrokeWidth(10); p.setAntiAlias(true); p.setColor(Color.RED); p.setStyle(Paint.Style.STROKE); RectF rectF = new RectF(0 + 10, 0 + 10, mWidth - 10, mHeight - 10); canvas.drawArc(rectF, 180, 360 * mProgress / 100, false, p); mProgress+=5; ~~~ 可以看到drawArc的第三個參數 是變化的 , 其中mProgress的初值是零,這里讓他自增,也就是說,每次調用onDraw方法,他就會增加。所以每次的弧都會比原來長一點點,直到最后畫完。 ?所以在程序的最后 一定有?postInvalidateDelayed(10); 方法。 接下來來繪制兩條線,這里的坐標我直接取半徑的4分之一啦,唯一注意一點就是,只有在progress大于100的時候 我們才繪制兩條線,兩條線段也是根據一個變量自增的,原理同上。 ?這里mLineOneX等參數均表示畫線的時候兩點的坐標。 當mLineOneX = mWidth * 0.5的時候 ?mWidth /4 + mLineOneX 就等于我們要畫線段的最終點。 ![](https://box.kancloud.cn/2016-03-21_56efaea40c9ac.jpg) ~~~ if (mProgress > 100) { //畫左邊的線 if (mLineOneX < mWidth * 0.5) { mLineOneX+=20; mLineOneY+=20; } canvas.drawLine(mWidth / 4, mHeight / 4, mWidth / 4 + mLineOneX, mHeight / 4 + mLineOneY, p); if (mLineOneX == mWidth * 0.5) { if (mLineTwoX < mWidth * 0.5) { mLineTwoX+=20; mLineTwoY+=20; }else { //判斷全部繪制完成 isLineDrawDone = true; } canvas.drawLine(mWidth / 4, (float) (mHeight * 0.75), mWidth / 4 + mLineTwoX, (float) (mHeight * 0.75) - mLineTwoY, p); } } ~~~ 之后 添加一個標記位 ? isLineDrawDone ?判斷一下 如果沒有畫完 則 : ~~~ if(isLineDrawDone){ Log.e("wing","draw done"); }else{ postInvalidateDelayed(10); } ~~~ 現在 基本上完成了繪制, ?別急 還沒加震動,震動效果是怎么實現的呢,大家還記得嗎,如果忘了,可以看看我這篇博客:[自定義動畫 實現抖一抖效果](http://blog.csdn.net/wingichoy/article/details/47122619) 所以我們要寫一個接口,來回調onStop ~~~ public interface OnStopListener{ void onStop(View v); } ~~~ 把最后的繪制完成完善,繼續增加一個標志位,代表全部繪制完成 ~~~ if(isLineDrawDone){ Log.e("wing","draw done"); if(!isDrawDone) { if (mOnStopListener != null) { mOnStopListener.onStop(this); } isDrawDone = true; } }else{ postInvalidateDelayed(10); } ~~~ 提供一個reset()方法 讓用戶可以手動控制重繪 ~~~ public void reset() { mProgress = 0; mLineOneX = 0; mLineOneY = 0; mLineTwoX = 0; mLineTwoY = 0; isLineDrawDone = false; isDrawDone = false; invalidate(); } ~~~ 在提供一個添加監聽器的方法 ~~~ public void setOnStopListener(OnStopListener onStopListener){ mOnStopListener = onStopListener; } ~~~ 最后 在Activity中 為這個View添加 震動效果 ~~~ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mErrorView = (ErrorView) findViewById(R.id.errorView); mErrorView.setOnStopListener(new ErrorView.OnStopListener() { @Override public void onStop(View v) { ShakeAnimation sa = new ShakeAnimation(); sa.setDuration(1000); v.startAnimation(sa); } }); mErrorView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mErrorView.reset(); } }); ~~~ 嘿嘿嘿。。。這樣就騙到了持之以恒勛章。 源碼地址:http://download.csdn.net/detail/wingichoy/9394685
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看