日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Canvas之translate、scale、rotate、skew

發(fā)布時間:2024/3/13 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Canvas之translate、scale、rotate、skew 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
id="BAIDU_DUP_fp_iframe" src="https://pos.baidu.com/wh/o.htm?ltr=" style="width: 0px; height: 0px; visibility: hidden; display: none;">
  • 收藏成功 確定 收藏失敗,請重新收藏 確定
  • src="about:block" frameborder="0" allowtransparency="true" style="z-index:-1;position:absolute;top:0;left:0;width:100%;height:100%;background:transparent">
  • 分享資訊 傳PPT/文檔 提問題 寫博客 傳資源 創(chuàng)建項目 創(chuàng)建代碼片
  • 設(shè)置昵稱 編輯自我介紹,讓更多人了解你
    帳號設(shè)置 退出
  • 社區(qū)
    博客
    論壇
    下載
    知識庫
    技術(shù)問答
    極客頭條
    英雄會
    服務(wù)
    JOB
    學院
    CODE
    活動
    CSTO
    C幣兌換
    俱樂部
    CTO俱樂部
    高校俱樂部

Ajian_studio

學問積年而成,而每日不自知!

  • 目錄視圖
  • 摘要視圖
  • 訂閱
<script type="text/javascript">var username = "tianjian4592"; var _blogger = username; var blog_address = "http://blog.csdn.net/tianjian4592"; var static_host = "http://static.blog.csdn.net"; var currentUserName = "";</script> 移動信息安全的漏洞和逆向原理??? 【觀點】世界上最好的語言是什么??? Get IT技能知識庫,50個領(lǐng)域一鍵直達 <script>document.getElementById('location_parent').parentNode.style.height='1px';document.getElementById('location_parent').parentNode.style.width='1px';document.getElementById('location_parent').parentNode.style.position='fixed';document.getElementById('location_parent').parentNode.style.right='10px';document.getElementById('location_parent').parentNode.style.bottom='10px';document.getElementById('location_parent').parentNode.style.zIndex=999;document.getElementById('location_parent').parentNode.style.backgroundColor='transparent';</script> id="iframeu2392861_0" src="http://pos.baidu.com/acrm?sz=300x250&rdid=2392861&dc=2&di=u2392861&dri=0&dis=0&dai=1&ps=1008x1818&coa=at%3D3%26rsi0%3D300%26rsi1%3D250%26pat%3D17%26tn%3DbaiduCustNativeAD_xuanfu%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1478326006940&ti=Canvas%E4%B9%8Btranslate%E3%80%81scale%E3%80%81rotate%E3%80%81skew%E6%96%B9%E6%B3%95%E8%AE%B2%E8%A7%A3%EF%BC%81%20-%20Ajian_studio%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91&ari=2&dbv=2&drs=3&pcs=1829x1019&pss=1829x19885&cfv=0&cpl=4&chi=3&cce=true&cec=UTF-8&tlm=1478326006&rw=1019&ltu=http%3A%2F%2Fblog.csdn.net%2Ftianjian4592%2Farticle%2Fdetails%2F45234419&ecd=1&psr=1920x1080&par=1846x1080&pis=-1x-1&ccd=24&cja=false&cmi=6&col=zh-CN&cdo=-1&tcn=1478326007&qn=846792b09ec303f7&tt=1478326006861.94.97.114" width="300" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0; vertical-align:bottom;margin:0;" allowtransparency="true"> 關(guān)閉 <script type="text/javascript">(window['cproStyleApi'] = window['cproStyleApi'] || {})['u2392861']={at:'3',rsi0:'300',rsi1:'250',pat:'17',tn:'baiduCustNativeAD_xuanfu',rss1:'#FFFFFF',conBW:'1',adp:'1',ptt:'0',titFF:'%E5%BE%AE%E8%BD%AF%E9%9B%85%E9%BB%91',titFS:'14',rss2:'#000000',titSU:'0'};/*服務(wù)器頻道首頁置頂Banner960*90,創(chuàng)建于2014-7-3*/(window.cproArray = window.cproArray || []).push({id:'u2392861'});</script> <script src="http://cpro.baidustatic.com/cpro/ui/f.js" type="text/javascript"></script> href="http://static.blog.csdn.net/css/comment1.css" type="text/css" rel="stylesheet" /> href="http://static.blog.csdn.net/css/style1.css" type="text/css" rel="stylesheet" /><script language="JavaScript" type="text/javascript" src="http://download.csdn.net/js/jquery.cookie.js"></script><script type="text/javascript" src="http://c.csdnimg.cn/rabbit/search-service/main.js"></script> rel="stylesheet" href="http://static.blog.csdn.net/public/res-min/markdown_views.css?v=1.0" /> rel="stylesheet" href="http://static.blog.csdn.net/css/category.css?v=1.0" /><script type="text/javascript" src="http://static.blog.csdn.net/public/res/bower-libs/MathJax/MathJax.js?config=TeX-AMS_HTML"></script><script type="text/javascript" src="http://static.blog.csdn.net/scripts/web-storage-cache.min.js"></script><script type="text/javascript" src="http://static.blog.csdn.net/scripts/replace.min.js"></script> <script type="text/ecmascript">window.quickReplyflag = true; var isBole = false;</script>

[置頂] Canvas之translate、scale、rotate、skew方法講解!

標簽: Canvasandroid畫布canvas.translatecanvas.scalecanvas.rotate 8987人閱讀 評論(11) 收藏 舉報 本文章已收錄于: .embody{padding:10px 10px 10px;margin:0 -20px;border-bottom:solid 1px #ededed; }.embody_b{margin:0 ;padding:10px 0;}.embody .embody_t,.embody .embody_c{display: inline-block;margin-right:10px;}.embody_t{font-size: 12px;color:#999;}.embody_c{font-size: 12px;}.embody_c img,.embody_c em{display: inline-block;vertical-align: middle; }.embody_c img{ width:30px;height:30px;}.embody_c em{margin: 0 20px 0 10px;color:#333;font-style: normal;} <script type="text/javascript">$(function () { try { var lib = eval("("+$("#lib").attr("value")+")"); var html = ""; if (lib.err == 0) { $.each(lib.data, function (i) { var obj = lib.data[i]; //html += ' ' + obj.name + "??"; html += ' 分類: android動效篇(12) 作者同類文章 X
    <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.js"></script>


    尊重原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明: FROM? GA_studio? ?http://blog.csdn.net/tianjian4592??


    前面說Canvas大致可以分為三類:

    1. save、restore 等與層的保存和回滾相關(guān)的方法;

    2. scale、rotate、clipXXX 等對畫布進行操作的方法;

    3. drawXXX 等一系列繪畫相關(guān)的方法;


    前面主要講了drawBitmap方法,并舉了一個星球浮動的栗子,在那個例子中,星球有大有小,需要移動,有時候可能需求上還需要旋轉(zhuǎn)或錯切,有了這些需求,我們就需要使用到與Canvas相關(guān)的translate、scale、rotate、skew這幾個方法,平移、縮放、旋轉(zhuǎn)、錯切,這四個詞聽起來是如此的熟悉,我們在做一些基本動畫的時候經(jīng)常會與這幾個詞打交道,現(xiàn)在我們一個個看下當把這幾個家伙和Canvas(畫布)結(jié)合能產(chǎn)生什么效果;

    當然在看之前得先明確兩個基本概念:

    1.Canvas 的左上角是(0,0);

    2.基于左上角往右 X 為正,往下 Y 為正,反之為負;


    一、canvas.translate() - 畫布的平移:

    首先咱們在畫布上畫一個400 X 400 紅色的矩形

    [html] view plain copy print ?
  • canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);

    此時整個畫布的左上角出現(xiàn)了一個紅色的矩形(為了更清楚,藍色打個底)該矩形大小為400 X 400 ,效果如下:


    接下來我們canvas.translate( )玩玩

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.translate(100,?100);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.translate(100, 100);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);}
    看下效果:

    此時可以看到,雖然是繪制同樣的矩形,但矩形在畫布上的位置已經(jīng)向右和向下各移動了100px;

    既然如此,這個時候如果我們再將canvas 平移(translate)(100,100),再繪制一個同樣的矩形會出現(xiàn)什么情況呢?會與之前的矩形重疊嗎?咱們拭目以待:

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.translate(100,?100);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ????canvas.translate(100,?100);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.translate(100, 100);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);canvas.translate(100, 100);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);}


    從效果上看,兩次translate 進行了疊加,繪制第二個矩形的時候畫布已經(jīng)偏移了(200,200);

    好了,了解到這里,咱們利用canvas.translate( )一起來做個小栗子,繪制一個生活中比較常用的刻度尺;

    咱們先從網(wǎng)上找個用于參考的刻度尺圖片:

    從圖上看,刻度尺的元素有:外框、刻度線(不同的數(shù)值刻度線長短不一)、數(shù)字

    所以我們所要做的就是對上面的元素在onDraw里分別繪制:

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????//?繪制外框??
  • ????drawOuter(canvas);??
  • ????//?繪制刻度線??
  • ????drawLines(canvas);??
  • ????//?繪制數(shù)字??
  • ????drawNumbers(canvas);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 繪制外框drawOuter(canvas);// 繪制刻度線drawLines(canvas);// 繪制數(shù)字drawNumbers(canvas);} 咱們先簡單分析一下,刻度尺有個外框,外框距離左右都有一定的邊距,第一根和最后一根刻度線距離邊框也有一定的邊距,其余刻度線之間距離相同,另外一些特殊的刻度線長短不一;

    有了上面的分析,咱們一個一個來,先繪制外框,外框也就是一個矩形,只需要確定邊框的位置和大小,然后使用canvas.drawRect( )繪制即可:

    咱們先定義幾個需要的數(shù)據(jù),為了屏幕適配,數(shù)據(jù)均為dp:

    [html] view plain copy print ?
  • //?刻度尺高度??
  • private?static?final?int?DIVIDING_RULE_HEIGHT?=?70;??
  • //?距離左右間??
  • private?static?final?int?DIVIDING_RULE_MARGIN_LEFT_RIGHT?=?10;??
  • ??
  • //?第一條線距離邊框距離??
  • private?static?final?int?FIRST_LINE_MARGIN?=?5;??
  • //?打算繪制的厘米數(shù)??
  • private?static?final?int?DEFAULT_COUNT?=?9;??
  • // 刻度尺高度private static final int DIVIDING_RULE_HEIGHT = 70;// 距離左右間private static final int DIVIDING_RULE_MARGIN_LEFT_RIGHT = 10;// 第一條線距離邊框距離private static final int FIRST_LINE_MARGIN = 5;// 打算繪制的厘米數(shù)private static final int DEFAULT_COUNT = 9; 然后將以上數(shù)據(jù)轉(zhuǎn)為對應(yīng)像素值:

    [html] view plain copy print ?
  • private?void?initData()?{??
  • ????mDividRuleHeight?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,??
  • ????????????DIVIDING_RULE_HEIGHT,?mResources.getDisplayMetrics());??
  • ????mHalfRuleHeight?=?mDividRuleHeight?/?2;??
  • ??
  • ????mDividRuleLeftMargin?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,??
  • ????????????DIVIDING_RULE_MARGIN_LEFT_RIGHT,?mResources.getDisplayMetrics());??
  • ????mFirstLineMargin?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,??
  • ????????????FIRST_LINE_MARGIN,?mResources.getDisplayMetrics());??
  • ??
  • }??
  • private void initData() {mDividRuleHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,DIVIDING_RULE_HEIGHT, mResources.getDisplayMetrics());mHalfRuleHeight = mDividRuleHeight / 2;mDividRuleLeftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,DIVIDING_RULE_MARGIN_LEFT_RIGHT, mResources.getDisplayMetrics());mFirstLineMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,FIRST_LINE_MARGIN, mResources.getDisplayMetrics());} 有了以上數(shù)據(jù),則可以確定外邊框的Rect為:

    [html] view plain copy print ?
  • mOutRect?=?new?Rect(mDividRuleLeftMargin,?top,?mTotalWidth?-?mDividRuleLeftMargin,??
  • ????????????????mRuleBottom);??
  • mOutRect = new Rect(mDividRuleLeftMargin, top, mTotalWidth - mDividRuleLeftMargin,mRuleBottom);

    接下來看刻度線的繪制,根據(jù)厘米可以計算出中間的格數(shù),根據(jù)厘米占用屏幕寬度和所占格數(shù)可以計算出每一格所占屏幕寬度:

    [html] view plain copy print ?
  • mLineInterval?=?(mTotalWidth?-?2?*?mDividRuleLeftMargin?-?2?*?mFirstLineMargin)??
  • ????????????????/?(DEFAULT_COUNT?*?10?-?1);??
  • mLineInterval = (mTotalWidth - 2 * mDividRuleLeftMargin - 2 * mFirstLineMargin)/ (DEFAULT_COUNT * 10 - 1);

    有了每一格所占寬度,我們只需要在繪制刻度線的時候不斷將畫布右移對應(yīng)寬度即可:

    [html] view plain copy print ?
  • /**??
  • ?*?繪制刻度線??
  • ?*?@param?canvas??
  • ?*/??
  • private?void?drawLines(Canvas?canvas)?{??
  • ????canvas.save();??
  • ????canvas.translate(mLineStartX,?0);??
  • ????int?top?=?mMaxLineTop;??
  • ????for?(int?i?=?0;?i?<=?DEFAULT_COUNT?*?10;?i++)?{??
  • ????????if?(i?%?10?==?0)?{??
  • ????????????top?=?mMaxLineTop;??
  • ????????}?else?if?(i?%?5?==?0)?{??
  • ????????????top?=?mMiddleLineTop;??
  • ????????}?else?{??
  • ????????????top?=?mMinLineTop;??
  • ????????}??
  • ??
  • ????????canvas.drawLine(0,?mRuleBottom,?0,?top,?mLinePaint);??
  • ????????canvas.translate(mLineInterval,?0);??
  • ??
  • ????}??
  • ????canvas.restore();??
  • ??
  • }??
  • /*** 繪制刻度線* @param canvas*/private void drawLines(Canvas canvas) {canvas.save();canvas.translate(mLineStartX, 0);int top = mMaxLineTop;for (int i = 0; i <= DEFAULT_COUNT * 10; i++) {if (i % 10 == 0) {top = mMaxLineTop;} else if (i % 5 == 0) {top = mMiddleLineTop;} else {top = mMinLineTop;}canvas.drawLine(0, mRuleBottom, 0, top, mLinePaint);canvas.translate(mLineInterval, 0);}canvas.restore();} 由于刻度尺上分三種長短的刻度線,我們也做對應(yīng)處理,10的整數(shù)倍的刻度線最長,5的整數(shù)倍的刻度線中等長度,其余較短;

    此時繪制出的刻度尺效果為:


    此時刻度尺的基本樣子就出來了,對應(yīng)文字大家有興趣可以自己加上;

    俗話說,條條大路通羅馬,我們除了使用canvas.translate ,還能不能使用別的方式進行實現(xiàn)呢,答案當然是可以,比如在繪制的時候根據(jù)for循環(huán)里的 i 值也可以直接計算出每一根刻度線的位置,然后直接進行繪制,相比之下,這兩種方式的優(yōu)劣大家也可以自行比較一下,好了,canvas.translate() 就說這么多;


    二、canvas.scale( ) - 畫布的縮放:

    關(guān)于scale,Android 提供了以下兩個接口:

    [html] view plain copy print ?
  • /**??
  • ?*?Preconcat?the?current?matrix?with?the?specified?scale.??
  • ?*??
  • ?*?@param?sx?The?amount?to?scale?in?X??
  • ?*?@param?sy?The?amount?to?scale?in?Y??
  • ?*/??
  • public?native?void?scale(float?sx,?float?sy);??
  • ??
  • /**??
  • ?*?Preconcat?the?current?matrix?with?the?specified?scale.??
  • ?*??
  • ?*?@param?sx?The?amount?to?scale?in?X??
  • ?*?@param?sy?The?amount?to?scale?in?Y??
  • ?*?@param?px?The?x-coord?for?the?pivot?point?(unchanged?by?the?scale)??
  • ?*?@param?py?The?y-coord?for?the?pivot?point?(unchanged?by?the?scale)??
  • ?*/??
  • public?final?void?scale(float?sx,?float?sy,?float?px,?float?py)?{??
  • ????translate(px,?py);??
  • ????scale(sx,?sy);??
  • ????translate(-px,?-py);??
  • }??
  • /*** Preconcat the current matrix with the specified scale.** @param sx The amount to scale in X* @param sy The amount to scale in Y*/public native void scale(float sx, float sy);/*** Preconcat the current matrix with the specified scale.** @param sx The amount to scale in X* @param sy The amount to scale in Y* @param px The x-coord for the pivot point (unchanged by the scale)* @param py The y-coord for the pivot point (unchanged by the scale)*/public final void scale(float sx, float sy, float px, float py) {translate(px, py);scale(sx, sy);translate(-px, -py);} 我們先看下scale(float sx , float sy),我們還是以上面的正方形作為栗子,調(diào)用canvas.scale(float sx , float sy)之后看下效果;

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ????canvas.scale(0.5f,?0.5f);??
  • ????mPaint.setColor(Color.YELLOW);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);canvas.scale(0.5f, 0.5f);mPaint.setColor(Color.YELLOW);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);} 我們將畫布在x,y方向上均縮放為 0.5 倍,使用默認基準點(原點 0,0),效果如下:


    效果就相當于用個釘子釘在(0,0)處,然后把矩形的x,y縮放為一半,我們再來看看第二個接口scale(float sx , float sy, float px,float py):

    前兩個參數(shù)為將畫布在x、y方向上縮放的倍數(shù),而px和py 分別為縮放的基準點,從源碼上可以非常清楚的看出和scale(float sx , float sy)的差別:

    [html] view plain copy print ?
  • translate(px,?py);??
  • scale(sx,?sy);??
  • translate(-px,?-py);??
  • translate(px, py); scale(sx, sy); translate(-px, -py); 即先將畫布平移px,py,然后scale,scale結(jié)束之后再將畫布平移回原基準點;

    我們再在之前的基礎(chǔ)上繪制一個同樣的矩形,x , y 均縮放為 0.5 倍,縮放中心為矩形的中心:

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ??
  • ????//?保存畫布狀態(tài)??
  • ????canvas.save();??
  • ????canvas.scale(0.5f,?0.5f);??
  • ????mPaint.setColor(Color.YELLOW);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ????//?畫布狀態(tài)回滾??
  • ????canvas.restore();??
  • ??
  • ????canvas.scale(0.5f,?0.5f,?200,?200);??
  • ????mPaint.setColor(Color.BLACK);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);// 保存畫布狀態(tài)canvas.save();canvas.scale(0.5f, 0.5f);mPaint.setColor(Color.YELLOW);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);// 畫布狀態(tài)回滾canvas.restore();canvas.scale(0.5f, 0.5f, 200, 200);mPaint.setColor(Color.BLACK);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);}

    一起來看下效果:


    效果就相當于用個釘子釘在矩形的中心,然后進行縮放;

    根據(jù)上面android 的實現(xiàn),我們其實可以使用以下代碼實現(xiàn)同樣的效果:

    [html] view plain copy print ?
  • //?先將畫布平移到矩形的中心??
  • canvas.translate(200,?200);??
  • //?將畫布進行縮放??
  • canvas.scale(0.5f,?0.5f);??
  • //?將畫布移回原基準點??
  • canvas.translate(-200,?-200);??
  • mPaint.setColor(Color.BLACK);??
  • canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • // 先將畫布平移到矩形的中心canvas.translate(200, 200);// 將畫布進行縮放canvas.scale(0.5f, 0.5f);// 將畫布移回原基準點canvas.translate(-200, -200);mPaint.setColor(Color.BLACK);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);

    到此為止,我們也就了解了對畫布的縮放,基于canvas.scale(),我們一起完成一個小例子:


    上面是網(wǎng)絡(luò)上找的一張讓人產(chǎn)生視覺誤差的靜態(tài)圖,我們模擬繪制出上面的效果;

    思路非常的簡單:

    1. 繪制一個和屏幕等寬的正方形;

    2. 將畫布以正方形中心為基準點進行縮放;

    3. 在縮放的過程中繪制原正方形;

    注:每次繪制都得使用canvas.save() ?和 canvas.restore()進行畫布的鎖定和回滾,以免除對后面繪制的影響(后面會單獨講)

    先初始化畫筆,注意此時畫筆需要設(shè)置成空心:

    [html] view plain copy print ?
  • /**??
  • ?*?初始化畫筆??
  • ?*/??
  • private?void?initPaint()?{??
  • ????mPaint?=?new?Paint(Paint.ANTI_ALIAS_FLAG);??
  • ????//?將畫筆設(shè)置為空心??
  • ????mPaint.setStyle(Style.STROKE);??
  • ????//?設(shè)置畫筆顏色??
  • ????mPaint.setColor(Color.BLACK);??
  • ????//?設(shè)置畫筆寬度??
  • ????mPaint.setStrokeWidth(mLineWidth);??
  • }??
  • /*** 初始化畫筆*/private void initPaint() {mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 將畫筆設(shè)置為空心mPaint.setStyle(Style.STROKE);// 設(shè)置畫筆顏色mPaint.setColor(Color.BLACK);// 設(shè)置畫筆寬度mPaint.setStrokeWidth(mLineWidth);} 然后循環(huán)的將畫布縮放的同時繪制原正方形:

    [html] view plain copy print ?
  • /**??
  • ?*?繪制正方形??
  • ?*???
  • ?*?@param?canvas??
  • ?*/??
  • private?void?drawSquare(Canvas?canvas)?{??
  • ????for?(int?i?=?0;?i?<?TOTAL_SQUARE_COUNT;?i++)?{??
  • ????????//?保存畫布??
  • ????????canvas.save();??
  • ????????float?fraction?=?(float)?i?/?TOTAL_SQUARE_COUNT;??
  • ????????//?將畫布以正方形中心進行縮放??
  • ????????canvas.scale(fraction,?fraction,?mHalfWidth,?mHalfHeight);??
  • ????????canvas.drawRect(mSquareRect,?mPaint);??
  • ????????//?畫布回滾??
  • ????????canvas.restore();??
  • ????}??
  • }??
  • /*** 繪制正方形* * @param canvas*/private void drawSquare(Canvas canvas) {for (int i = 0; i < TOTAL_SQUARE_COUNT; i++) {// 保存畫布canvas.save();float fraction = (float) i / TOTAL_SQUARE_COUNT;// 將畫布以正方形中心進行縮放canvas.scale(fraction, fraction, mHalfWidth, mHalfHeight);canvas.drawRect(mSquareRect, mPaint);// 畫布回滾canvas.restore();}} 一起來看下繪制的效果:

    其實最終效果和網(wǎng)上找的還是有點小差別的,由于畫布的縮放,越小的時候畫筆寬度越細,而原圖是所有的都一樣寬度,但似乎畫筆寬度縮放之后效果更佳,哈哈 ... ...?


    三、canvas.rotate( ) - 畫布的旋轉(zhuǎn):

    canvas.rotate( )和canvas.scale()可以類比起來看,如果理解了canvas.scale( ),那么canvas.rotate( )將會非常簡單實用;

    簡單來講,canvas.rotate( )即是將畫布進行旋轉(zhuǎn),和canvas.scale( )類似的是,它也有兩個可以使用的方法:

    [html] view plain copy print ?
  • /**??
  • ?*?Preconcat?the?current?matrix?with?the?specified?rotation.??
  • ?*??
  • ?*?@param?degrees?The?amount?to?rotate,?in?degrees??
  • ?*/??
  • public?native?void?rotate(float?degrees);??
  • ??
  • /**??
  • ?*?Preconcat?the?current?matrix?with?the?specified?rotation.??
  • ?*??
  • ?*?@param?degrees?The?amount?to?rotate,?in?degrees??
  • ?*?@param?px?The?x-coord?for?the?pivot?point?(unchanged?by?the?rotation)??
  • ?*?@param?py?The?y-coord?for?the?pivot?point?(unchanged?by?the?rotation)??
  • ?*/??
  • public?final?void?rotate(float?degrees,?float?px,?float?py)?{??
  • ????translate(px,?py);??
  • ????rotate(degrees);??
  • ????translate(-px,?-py);??
  • }??
  • /*** Preconcat the current matrix with the specified rotation.** @param degrees The amount to rotate, in degrees*/public native void rotate(float degrees);/*** Preconcat the current matrix with the specified rotation.** @param degrees The amount to rotate, in degrees* @param px The x-coord for the pivot point (unchanged by the rotation)* @param py The y-coord for the pivot point (unchanged by the rotation)*/public final void rotate(float degrees, float px, float py) {translate(px, py);rotate(degrees);translate(-px, -py);}

    兩個方法的區(qū)別也是在于基準點的選取,默認是以原點作為基準點,另一個則是以傳入的x,y 作為基準點,是不是和scale 一模一樣,咱們一起來rotate一下:

    咱們先轉(zhuǎn)轉(zhuǎn)左上角的矩形,轉(zhuǎn)多少度呢?先來個90度玩玩吧;

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ????mPaint.setColor(Color.YELLOW);??
  • ????canvas.rotate(90);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);mPaint.setColor(Color.YELLOW);canvas.rotate(90);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);} 我們的預(yù)期是屏幕上有個旋轉(zhuǎn)了的騷黃色矩形,一起來看看;


    擦,黃色的矩形呢?

    由于基準點是原點,我們直接旋轉(zhuǎn)了90 度,所以已經(jīng)將矩形旋轉(zhuǎn)出屏幕,當然看不到了,我們將角度調(diào)小一點,改為45 度:

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ????mPaint.setColor(Color.YELLOW);??
  • ????canvas.rotate(45);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);mPaint.setColor(Color.YELLOW);canvas.rotate(45);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);}

    此時我們可以可以清楚的看到黃色的矩形是紅色矩形繞原點(0,0)旋轉(zhuǎn)45度之后的結(jié)果;


    我們再將旋轉(zhuǎn)基準點改為矩形中心看看:

    [html] view plain copy print ?
  • canvas.rotate(45,200,200);??
  • canvas.rotate(45,200,200);

    可以看到現(xiàn)在黃色矩形是紅色矩形繞著中心旋轉(zhuǎn)后的結(jié)果:


    到這里,我們已經(jīng)了解了canvas.rotate(float degrees)和 canvas.rotate(float degrees,float px , float py)的使用,同樣也應(yīng)該清楚后者的實現(xiàn)如下:

    [html] view plain copy print ?
  • translate(px,?py);??
  • rotate(degrees);??
  • translate(-px,?-py);??
  • translate(px, py); rotate(degrees); translate(-px, -py);

    好了,我們再利用canvas.rotate()完成個鬧鐘表盤的小例子:

    鬧鐘表盤其實和刻度尺類似,只是一個是在一條直線上繪制,一個是在一個圓周上繪制,說到底都是確定一個位置繪制刻度線;

    既然是圓周,最簡單的方式莫過于在鬧鐘的12點鐘處劃線,通過canvas的旋轉(zhuǎn)繪制到對應(yīng)圓周處,我們一起實現(xiàn)一下:

    整個圓周是360 度,每隔 30 度為一個整時間刻度,整刻度與刻度之間有四個短刻度,劃分出5個小段,每個段為6度,有了這些分析,我們則可以采用如下代碼進行繪制:

    [html] view plain copy print ?
  • /**??
  • ?*?繪制刻度??
  • ?*???
  • ?*?@param?canvas??
  • ?*/??
  • private?void?drawLines(Canvas?canvas)?{??
  • ????for?(int?i?=?0;?i?<=?360;?i++)?{??
  • ????????if?(i?%?30?==?0)?{??
  • ????????????mLineBottom?=?mLineTop?+?mLongLineHeight;??
  • ????????????mLinePaint.setStrokeWidth(mLineWidth);??
  • ????????}?else?{??
  • ????????????mLineBottom?=?mLineTop?+?mShortLineHeight;??
  • ????????????mLinePaint.setStrokeWidth(mHalfLineWidth);??
  • ????????}??
  • ??
  • ????????if?(i?%?6?==?0)?{??
  • ????????????canvas.save();??
  • ????????????canvas.rotate(i,?mHalfWidth,?mHalfHeight);??
  • ????????????canvas.drawLine(mLineLeft,?mLineTop,?mLineLeft,?mLineBottom,?mLinePaint);??
  • ????????????canvas.restore();??
  • ????????}??
  • ????}??
  • }??
  • /*** 繪制刻度* * @param canvas*/private void drawLines(Canvas canvas) {for (int i = 0; i <= 360; i++) {if (i % 30 == 0) {mLineBottom = mLineTop + mLongLineHeight;mLinePaint.setStrokeWidth(mLineWidth);} else {mLineBottom = mLineTop + mShortLineHeight;mLinePaint.setStrokeWidth(mHalfLineWidth);}if (i % 6 == 0) {canvas.save();canvas.rotate(i, mHalfWidth, mHalfHeight);canvas.drawLine(mLineLeft, mLineTop, mLineLeft, mLineBottom, mLinePaint);canvas.restore();}}}

    此時效果如下:


    整體代碼如下:

    [html] view plain copy print ?
  • /**??
  • ?*?鬧鐘表盤??
  • ?*???
  • ?*?@author?AJian??
  • ?*/??
  • public?class?RotateClockView?extends?View?{??
  • ??
  • ????private?static?final?int?LONG_LINE_HEIGHT?=?35;??
  • ????private?static?final?int?SHORT_LINE_HEIGHT?=?25;??
  • ????private?Paint?mCirclePaint,?mLinePaint;??
  • ????private?DrawFilter?mDrawFilter;??
  • ????private?int?mHalfWidth,?mHalfHeight;??
  • ??
  • ????//?圓環(huán)線寬度??
  • ????private?int?mCircleLineWidth,?mHalfCircleLineWidth;??
  • ????//?直線刻度線寬度??
  • ????private?int?mLineWidth,?mHalfLineWidth;??
  • ????//?長線長度??
  • ????private?int?mLongLineHeight;??
  • ????//?短線長度??
  • ????private?int?mShortLineHeight;??
  • ????//?刻度線的左、上位置??
  • ????private?int?mLineLeft,?mLineTop;??
  • ??
  • ????//?刻度線的下邊位置??
  • ????private?int?mLineBottom;??
  • ????//?用于控制刻度線位置??
  • ????private?int?mFixLineHeight;??
  • ??
  • ????public?RotateClockView(Context?context)?{??
  • ????????super(context);??
  • ????????mDrawFilter?=?new?PaintFlagsDrawFilter(0,?Paint.ANTI_ALIAS_FLAG??
  • ????????????????|?Paint.FILTER_BITMAP_FLAG);??
  • ??
  • ????????mCircleLineWidth?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,?8,??
  • ????????????????getResources().getDisplayMetrics());??
  • ????????mHalfCircleLineWidth?=?mCircleLineWidth;??
  • ????????mLineWidth?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,?4,??
  • ????????????????getResources().getDisplayMetrics());??
  • ????????mHalfLineWidth?=?mLineWidth?/?2;??
  • ??
  • ????????mFixLineHeight?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,?4,??
  • ????????????????getResources().getDisplayMetrics());??
  • ??
  • ????????mLongLineHeight?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,??
  • ????????????????LONG_LINE_HEIGHT,??
  • ????????????????getResources().getDisplayMetrics());??
  • ????????mShortLineHeight?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,??
  • ????????????????SHORT_LINE_HEIGHT,??
  • ????????????????getResources().getDisplayMetrics());??
  • ????????initPaint();??
  • ????}??
  • ??
  • ????private?void?initPaint()?{??
  • ????????mCirclePaint?=?new?Paint(Paint.ANTI_ALIAS_FLAG);??
  • ????????mCirclePaint.setColor(Color.RED);??
  • ????????//?將畫筆設(shè)置為空心??
  • ????????mCirclePaint.setStyle(Style.STROKE);??
  • ????????//?設(shè)置畫筆寬度??
  • ????????mCirclePaint.setStrokeWidth(mCircleLineWidth);??
  • ??
  • ????????mLinePaint?=?new?Paint(Paint.ANTI_ALIAS_FLAG);??
  • ????????mLinePaint.setColor(Color.RED);??
  • ????????mLinePaint.setStyle(Style.FILL_AND_STROKE);??
  • ????????//?設(shè)置畫筆寬度??
  • ????????mLinePaint.setStrokeWidth(mLineWidth);??
  • ????}??
  • ??
  • ????@Override??
  • ????protected?void?onMeasure(int?widthMeasureSpec,?int?heightMeasureSpec)?{??
  • ????????super.onMeasure(widthMeasureSpec,?heightMeasureSpec);??
  • ????}??
  • ??
  • ????@Override??
  • ????protected?void?onDraw(Canvas?canvas)?{??
  • ????????canvas.setDrawFilter(mDrawFilter);??
  • ????????super.onDraw(canvas);??
  • ????????//?繪制表盤??
  • ????????drawCircle(canvas);??
  • ????????//?繪制刻度??
  • ????????drawLines(canvas);??
  • ????}??
  • ??
  • ????/**??
  • ?????*?繪制刻度??
  • ?????*???
  • ?????*?@param?canvas??
  • ?????*/??
  • ????private?void?drawLines(Canvas?canvas)?{??
  • ????????for?(int?i?=?0;?i?<=?360;?i++)?{??
  • ????????????if?(i?%?30?==?0)?{??
  • ????????????????mLineBottom?=?mLineTop?+?mLongLineHeight;??
  • ????????????????mLinePaint.setStrokeWidth(mLineWidth);??
  • ????????????}?else?{??
  • ????????????????mLineBottom?=?mLineTop?+?mShortLineHeight;??
  • ????????????????mLinePaint.setStrokeWidth(mHalfLineWidth);??
  • ????????????}??
  • ??
  • ????????????if?(i?%?6?==?0)?{??
  • ????????????????canvas.save();??
  • ????????????????canvas.rotate(i,?mHalfWidth,?mHalfHeight);??
  • ????????????????canvas.drawLine(mLineLeft,?mLineTop,?mLineLeft,?mLineBottom,?mLinePaint);??
  • ????????????????canvas.restore();??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??
  • ????/**??
  • ?????*?繪制表盤??
  • ?????*???
  • ?????*?@param?canvas??
  • ?????*/??
  • ????private?void?drawCircle(Canvas?canvas)?{??
  • ????????canvas.drawCircle(mHalfWidth,?mHalfHeight,?mHalfWidth?-?mHalfCircleLineWidth,?mCirclePaint);??
  • ????}??
  • ??
  • ????@Override??
  • ????protected?void?onSizeChanged(int?w,?int?h,?int?oldw,?int?oldh)?{??
  • ????????super.onSizeChanged(w,?h,?oldw,?oldh);??
  • ????????mHalfWidth?=?w?/?2;??
  • ????????mHalfHeight?=?h?/?2;??
  • ??
  • ????????mLineLeft?=?mHalfWidth?-?mHalfLineWidth;??
  • ????????mLineTop?=?mHalfHeight?-?mHalfWidth?+?mFixLineHeight;??
  • ????}??
  • }??
  • /*** 鬧鐘表盤* * @author AJian*/ public class RotateClockView extends View {private static final int LONG_LINE_HEIGHT = 35;private static final int SHORT_LINE_HEIGHT = 25;private Paint mCirclePaint, mLinePaint;private DrawFilter mDrawFilter;private int mHalfWidth, mHalfHeight;// 圓環(huán)線寬度private int mCircleLineWidth, mHalfCircleLineWidth;// 直線刻度線寬度private int mLineWidth, mHalfLineWidth;// 長線長度private int mLongLineHeight;// 短線長度private int mShortLineHeight;// 刻度線的左、上位置private int mLineLeft, mLineTop;// 刻度線的下邊位置private int mLineBottom;// 用于控制刻度線位置private int mFixLineHeight;public RotateClockView(Context context) {super(context);mDrawFilter = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG| Paint.FILTER_BITMAP_FLAG);mCircleLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8,getResources().getDisplayMetrics());mHalfCircleLineWidth = mCircleLineWidth;mLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,getResources().getDisplayMetrics());mHalfLineWidth = mLineWidth / 2;mFixLineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,getResources().getDisplayMetrics());mLongLineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,LONG_LINE_HEIGHT,getResources().getDisplayMetrics());mShortLineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,SHORT_LINE_HEIGHT,getResources().getDisplayMetrics());initPaint();}private void initPaint() {mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);mCirclePaint.setColor(Color.RED);// 將畫筆設(shè)置為空心mCirclePaint.setStyle(Style.STROKE);// 設(shè)置畫筆寬度mCirclePaint.setStrokeWidth(mCircleLineWidth);mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);mLinePaint.setColor(Color.RED);mLinePaint.setStyle(Style.FILL_AND_STROKE);// 設(shè)置畫筆寬度mLinePaint.setStrokeWidth(mLineWidth);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onDraw(Canvas canvas) {canvas.setDrawFilter(mDrawFilter);super.onDraw(canvas);// 繪制表盤drawCircle(canvas);// 繪制刻度drawLines(canvas);}/*** 繪制刻度* * @param canvas*/private void drawLines(Canvas canvas) {for (int i = 0; i <= 360; i++) {if (i % 30 == 0) {mLineBottom = mLineTop + mLongLineHeight;mLinePaint.setStrokeWidth(mLineWidth);} else {mLineBottom = mLineTop + mShortLineHeight;mLinePaint.setStrokeWidth(mHalfLineWidth);}if (i % 6 == 0) {canvas.save();canvas.rotate(i, mHalfWidth, mHalfHeight);canvas.drawLine(mLineLeft, mLineTop, mLineLeft, mLineBottom, mLinePaint);canvas.restore();}}}/*** 繪制表盤* * @param canvas*/private void drawCircle(Canvas canvas) {canvas.drawCircle(mHalfWidth, mHalfHeight, mHalfWidth - mHalfCircleLineWidth, mCirclePaint);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mHalfWidth = w / 2;mHalfHeight = h / 2;mLineLeft = mHalfWidth - mHalfLineWidth;mLineTop = mHalfHeight - mHalfWidth + mFixLineHeight;} }

    同樣的,有興趣的同學可以自己補上文字;


    四、canvas.skew( ) - 畫布的錯切:?

    [html] view plain copy print ?
  • /**??
  • ?*?Preconcat?the?current?matrix?with?the?specified?skew.??
  • ?*??
  • ?*?@param?sx?The?amount?to?skew?in?X??
  • ?*?@param?sy?The?amount?to?skew?in?Y??
  • ?*/??
  • public?native?void?skew(float?sx,?float?sy);??
  • /*** Preconcat the current matrix with the specified skew.** @param sx The amount to skew in X* @param sy The amount to skew in Y*/public native void skew(float sx, float sy);

    這個方法只要理解了兩個參數(shù)即可:

    float sx:將畫布在x方向上傾斜相應(yīng)的角度,sx為傾斜角度的tan值;

    float sy:將畫布在y軸方向上傾斜相應(yīng)的角度,sy為傾斜角度的tan值;

    注意,這里全是傾斜角度的tan值,比如我們打算在X軸方向上傾斜45度,tan45=1;

    先在X 軸上傾斜45 度,我們一起看看:

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ??
  • ????//?x?方向上傾斜45?度??
  • ????canvas.skew(1,?0);??
  • ????mPaint.setColor(0x8800ff00);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);// x 方向上傾斜45 度canvas.skew(1, 0);mPaint.setColor(0x8800ff00);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);} 效果如下:


    再在y軸上傾斜45度看看:

    [html] view plain copy print ?
  • @Override??
  • protected?void?onDraw(Canvas?canvas)?{??
  • ????super.onDraw(canvas);??
  • ????canvas.drawColor(Color.BLUE);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • ??
  • ????//?y?方向上傾斜45?度??
  • ????canvas.skew(0,?1);??
  • ????mPaint.setColor(0x8800ff00);??
  • ????canvas.drawRect(new?Rect(0,?0,?400,?400),?mPaint);??
  • }??
  • @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLUE);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);// y 方向上傾斜45 度canvas.skew(0, 1);mPaint.setColor(0x8800ff00);canvas.drawRect(new Rect(0, 0, 400, 400), mPaint);} 此時效果如下:



    關(guān)于Canvas(畫布)的translate(平移)、scale(縮放) 、rotate(旋轉(zhuǎn)) 、skew(錯切)就說這么多,這些方法都不復(fù)雜,而靈活的使用往往能解決繪制中很多看似復(fù)雜的問題,所以重在理解,并在看到與之相關(guān)的效果時能夠及時恰當?shù)倪M行關(guān)聯(lián)。


    當然對Canvas的操作往往使用Matrix(后面會單獨講)也能達到同樣的效果,想看例子可參考?一個絢麗的loading動效分析與實現(xiàn)!


    源碼下載鏈接




    <script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script> rel="stylesheet" href="http://static.blog.csdn.net/css/blog_detail.css" /> <script type="text/javascript" id="bdshare_js" data="type=tools&amp;uid=1536434" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=410647"></script><script type="text/javascript">document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)</script> 頂
    15
    2
    <script type="text/javascript">function btndigga() { $(".tracking-ad[data-mod='popu_222'] a").click(); } function btnburya() { $(".tracking-ad[data-mod='popu_223'] a").click(); }</script>

    我的同類文章

    android動效篇(12) http://blog.csdn.net
    • ?Path特效之PathMeasure打造萬能路徑動效2015-07-26閱讀8378
    • ?Path相關(guān)方法講解(一)2015-06-15閱讀6706
    • ?Canvas開篇之drawBitmap方法講解2015-04-14閱讀22155
    • ?Android使用SVG矢量圖打造酷炫動效!2015-03-31閱讀36646
    • ?Paint、Canvas、Matrix使用講解(一、Paint)2015-03-18閱讀11862
    • ?Path相關(guān)方法講解(二)2015-07-19閱讀3457
    • ?Android 漂浮類動效的分析與實現(xiàn)!2015-04-22閱讀6852
    • ?Android Paint之 setXfermode PorterDuffXfermode 講解2015-04-07閱讀13335
    • ?一個絢麗的loading動效分析與實現(xiàn)!2015-03-23閱讀30643
    • ?自定義view實現(xiàn)水波紋效果2015-03-12閱讀14176
    更多文章 <script type="text/javascript">$(function () { GetCategoryArticles('2873607', 'tianjian4592','foot','45234419'); });</script> <script language="javascript" type="text/javascript">$(function(){ $.get("/tianjian4592/svc/GetSuggestContent/45234419",function(data){ $("#suggest").html(data); }); });</script> .blog-ass-articl dd { color: #369; width: 99%; /*修改行*/ float: left; overflow: hidden; font: normal normal 12px/23px "SimSun"; height: 23px; margin: 0; padding: 0 0 0 10px; margin-right: 30px; background: url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; } rel="stylesheet" href="http://static.blog.csdn.net/css/replace.css" />

    參考知識庫

    .NET知識庫

    1387關(guān)注|800收錄

    Android知識庫

    21013關(guān)注|1809收錄

    更多資料請參考: 猜你在找 <script src="http://csdnimg.cn/jobreco/job_reco.js" type="text/javascript"></script> <script type="text/javascript">csdn.position.showEdu({ sourceType: "blog", searchType: "detail", searchKey: "45234419", username: "", recordcount: "5", containerId: "adCollege" //容器DIV的id。 });</script>
    解析移動應(yīng)用的身份認證, 數(shù)據(jù)分析及信息推送
    TalkingData研發(fā)副總裁閻志濤:Spark在TalkingData移動大數(shù)據(jù)平臺的實踐
    WEB開發(fā):拉鉤網(wǎng)遮罩移動效果
    如何打造移動環(huán)境下滿足業(yè)務(wù)場景的高可用架構(gòu)
    移動直播技術(shù)專場:百萬彈幕下的直播禮物系統(tǒng)
    移動端干貨
    移動開發(fā)
    這個項目收集移動端開發(fā)所需要的一些資源與小技巧
    Android自定義繪制
    手機那點事已有高人把常見的不常見的坑都給找出來了我就隨便轉(zhuǎn)一下了
    <script type="text/javascript">$(function () { setTimeout(function () { var searchtitletags = 'Canvas之translate、scale、rotate、skew方法講解!' + ',' + $("#tags").html(); searchService({ index: 'blog', query: searchtitletags, from: 5, size: 5, appendTo: '#res', url: 'recommend', his: 2, client: "blog_cf_enhance", tmpl: '
    #{ title }
    ' }); }, 500); });</script> <script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> width="728" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" οnlοad="var i=this.id,s=window.google_iframe_oncopy,H=s&&s.handlers,h=H&&H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&&d&&(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_0" name="aswift_0" style="left:0;position:absolute;top:0;"><script>(adsbygoogle=window.adsbygoogle || []).push({});</script> 查看評論 10樓 又是美好一天 2016-09-07 21:03發(fā)表 [回復(fù)]
    “scale(float sx , float sy, float px,float py):先將畫布平移px,py,然后scale,scale結(jié)束之后再將畫布平移回原基準點;我們再在之前的基礎(chǔ)上繪制一個同樣的矩形,x , y 均縮放為 0.5 倍,縮放中心為矩形的中心;”這句話的意思是縮放中心為矩形中心,那為什么canvas.scale(0.5f, 0.5f);畫布在x,y方向上均縮放為 0.5 倍,使用默認基準點(原點 0,0),而不是矩形中心呢?
    9樓 code_river 2016-07-07 15:15發(fā)表 [回復(fù)]
    感謝樓主分享
    8樓 nailsoul 2016-03-29 23:30發(fā)表 [回復(fù)]
    贊一個 通過該栗子搞懂了save和restore的意思了 謝謝樓主了
    唉名字取的有奇異啊 xxState因該好理解點
    7樓 FionaRyan 2016-03-25 17:11發(fā)表 [回復(fù)]
    # 2016一線互聯(lián)網(wǎng)名企集結(jié)號# #實習#
    “簡尋”聯(lián)合阿里、搜狗、百度音樂、小米、蘑菇街、鳳凰網(wǎng)等 20+ 一線互聯(lián)網(wǎng)公司舉辦2016技術(shù)實習專場活動,?200+技術(shù)實習崗,通過審核的可獲5-10 次名企面試推薦。
    【報名方式】
    1.活動報名地址:https://h5.jianxun.io開啟一鍵求職
    2.搜索微信公眾號:jianxun-fuwu
    【面向群體】
    1. 實習生:2017 年及以后畢業(yè)的本科生/研究生,尋找技術(shù)類的 春季 / 暑期 實習
    2. 應(yīng)屆生:2016 年應(yīng)屆畢業(yè)生 , 技術(shù)類工作
    【活動時間】
    3月15日 - 5月15日
    注:春季/暑期實習皆可,具體事宜可與企業(yè)單獨商議
    【簡尋提供】
    1.??直接面試機會
    一線企業(yè):阿里B2B、搜狗、蘑菇街、小米、豌豆莢 等
    實力大牌:果殼網(wǎng)、人人、百度作業(yè)幫、鳳凰網(wǎng)、么么嗖?等
    新銳團隊:長亭科技、酷家樂、云校、野糖、海智網(wǎng)聚 等
    2. 活動福利
    最優(yōu)秀的三名學生將獲活動協(xié)辦方—— 包子IT 免費提供得北美頂尖 IT公司(Microsoft、google、facebook、Linkedin、amazon等)工程師進行一對一的全英模擬面試+指導(dǎo),面試優(yōu)異者可直接獲得北美名企的內(nèi)推機會。
    其他優(yōu)秀學生,包子IT 還將提供免費針對北美 CS 方向的模擬試題;頂尖公司和明星創(chuàng)業(yè)公司的多位老師們,將為大家講解 題目+背后線索,認真閱讀每一份考卷、每一行代碼,幫助大家提高代碼結(jié)構(gòu)和質(zhì)量。
    【活動流程】
    1.???報名注冊 → 2.???簡歷審核 → 3.???電話面試 → 4. 企業(yè)推薦 → 5. 企業(yè)復(fù)面 → 6. 發(fā)放offer
    6樓 yubaoma 2016-03-16 09:51發(fā)表 [回復(fù)]
    mark
    5樓 xiaomingi07 2016-02-26 15:41發(fā)表 [回復(fù)]
    介紹的東西太實用了,而且栗子也容易理解,一定要踩一下!
    4樓 mr_gang1992 2016-01-21 16:54發(fā)表 [回復(fù)]
    樓主在上面寫文字的時候,遇到一個問題,就是文字跟著畫布旋轉(zhuǎn)了,如何才能保證文字,文字不旋轉(zhuǎn)...望樓主解答啊。。。
    Re: 學問積年而成 2016-01-21 17:37發(fā)表 [回復(fù)]
    回復(fù)mr_gang1992:使用
    canvas.save();
    XXXX;
    canvas.restore();
    3樓 gongyong2008 2015-06-03 13:16發(fā)表 [回復(fù)]
    大神帶我飛啊
    2樓 kangGe_studio 2015-05-10 16:34發(fā)表 [回復(fù)]
    贊一個
    1樓 LFy_Yu 2015-05-08 09:10發(fā)表 [回復(fù)]
    給力
    您還沒有登錄,請 [登錄]或 [注冊] * 以上用戶言論只代表其個人觀點,不代表CSDN網(wǎng)站的觀點或立場 <script type="text/javascript">var fileName = '45234419'; var commentscount = 11; var islock = false</script><script type="text/javascript" src="http://static.blog.csdn.net/scripts/comment.js"></script> <script type="text/javascript">$(function () { $("#ad_frm_0").height("90px"); setTimeout(function(){ $("#ad_frm_2").height("200px"); },1000); });</script> .tag_list{background: none repeat scroll 0 0 #FFFFFF;border: 1px solid #D7CBC1;color: #000000;font-size: 12px;line-height: 20px;list-style: none outside none;margin: 10px 2% 0 1%;padding: 1px;}.tag_list h5{background: none repeat scroll 0 0 #E0DBD3;color: #47381C;font-size: 12px;height: 24px;line-height: 24px;padding: 0 5px;margin: 0;}.tag_list h5 a{color: #47381C;}.classify{margin: 10px 0;padding: 4px 12px 8px;}.classify a{margin-right: 20px;white-space: nowrap;}
    核心技術(shù)類目
    全部主題 Hadoop AWS 移動游戲 Java Android iOS Swift 智能硬件 Docker OpenStack VPN Spark ERP IE10 Eclipse CRM JavaScript 數(shù)據(jù)庫 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云計算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大數(shù)據(jù) aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap <script language="javascript" type="text/javascript">$(function(){ setTimeout(function(){ $.get("/tianjian4592/svc/GetTagContent",function(data){ $(".tag_list").html(data).show(); }); }); },500);</script> #popup_mask{position: absolute;width: 100%;height: 100%;background: #000;z-index: 9999;left: 0px;top: 0px;opacity: 0.3;filter: alpha(opacity=30);display: none;}<script type="text/javascript">$(function(){ setTimeout(function(){ $(".comment_body:contains('回復(fù)')").each(function(index,item){ var u=$(this).text().split(':')[0].toString().replace("回復(fù)","") var thisComment=$(this); if(u) { $.getJSON("https://passport.csdn.net/get/nick?callback=?", {users: u}, function(a) { if(a!=null&&a.data!=null&&a.data.length>0) { nick=a.data[0].n; if(u!=nick) { thisComment.text(thisComment.text().replace(u,nick)); } } }); } }); },200); setTimeout(function(){ $(".math").each(function(index,value){$(this).find("span").last().css("color","#fff"); }) },5000); setTimeout(function(){ $(".math").each(function(index,value){$(this).find("span").last().css("color","#fff"); }) },10000); setTimeout(function(){ $(".math").each(function(index,value){$(this).find("span").last().css("color","#fff"); }) },15000); setTimeout(function(){ $("a img[src='http://js.tongji.linezing.com/stats.gif']").parent().css({"position":"absolute","left":"50%"}); },300); }); function loginbox(){ var $logpop=$("#pop_win"); $logpop.html(' src="https://passport.csdn.net/account/loginbox?service=http://static.blog.csdn.net/callback.htm" frameborder="0" height="600" width="400" scrolling="no">'); $('#popup_mask').css({ opacity: 0.5, width: $( document ).width() + 'px', height: $( document ).height() + 'px' }); $('#popup_mask').css("display","block"); $logpop.css( { top: ($( window ).height() - $logpop.height())/ 2 + $( window ).scrollTop() + 'px', left:($( window ).width() - $logpop.width())/ 2 } ); setTimeout( function () { $logpop.show(); $logpop.css( { opacity: 1 } ); }, 200 ); $('#popup_mask').unbind("click"); $('#popup_mask').bind("click", function(){ $('#popup_mask').hide(); var $clopop = $("#pop_win"); $("#common_ask_div_sc").css("display","none"); $clopop.css( { opacity: 0 } ); setTimeout( function () { $clopop.hide(); }, 350 ); return false; }); }</script> <script language="javascript" type="text/javascript" src="http://ads.csdn.net/js/async_new.js"></script>
    • 個人資料

    • 學問積年而成
      • 訪問:242632次
      • 積分:2709
      • 等級: 積分:2709
      • 排名:第10054名
      • 原創(chuàng):56篇
      • 轉(zhuǎn)載:0篇
      • 譯文:0篇
      • 評論:340條
    • 文章搜索
    <script type="text/javascript">$(function () { $("#btnSubmit").click(function () { search(); }); $("#frmSearch").submit(function () { search(); return false; }); function search() { var url = "http://so.csdn.net/so/search/s.do?q=" + encodeURIComponent($("#inputSearch").val()) + "&u=" + username + "&t=blog"; window.location.href = url; } });</script>
    • 文章分類
    • android動效篇(13)
    • 性能優(yōu)化(0)
    • 反編譯(0)
    • android常見問題(2)
    • 基礎(chǔ)總結(jié)(20)
    • javascript(5)
    • javaweb(11)
    • JDBC(3)
    • AJAX(1)
    • 心路歷程(0)
    • 文章存檔
      • 2015年07月(2)
      • 2015年06月(1)
      • 2015年05月(1)
      • 2015年04月(4)
      • 2015年03月(6)
      • 2015年02月(1)
      • 2012年09月(3)
      • 2012年08月(2)
      • 2012年07月(20)
      • 2012年06月(13)
      • 2012年05月(3)
      • 展開
    • 閱讀排行
    • Android使用SVG矢量圖打造酷炫動效!(36738)
    • 一個絢麗的loading動效分析與實現(xiàn)!(30684)
    • Canvas開篇之drawBitmap方法講解(22260)
    • 自定義view實現(xiàn)水波紋效果(14259)
    • Android Paint之 setXfermode PorterDuffXfermode 講解(13369)
    • Paint、Canvas、Matrix使用講解(一、Paint)(11889)
    • Canvas之translate、scale、rotate、skew方法講解!(8984)
    • 關(guān)于引入第三方j(luò)ar包引發(fā)的java.lang.NoClassDefFoundError解決(8766)
    • Path特效之PathMeasure打造萬能路徑動效(8404)
    • android動效開篇(8335)
    • 評論排行
    • 一個絢麗的loading動效分析與實現(xiàn)!(177)
    • 自定義view實現(xiàn)水波紋效果(33)
    • Paint、Canvas、Matrix使用講解(一、Paint)(25)
    • Android Paint之 setXfermode PorterDuffXfermode 講解(21)
    • Android使用SVG矢量圖打造酷炫動效!(20)
    • Canvas開篇之drawBitmap方法講解(15)
    • Canvas之translate、scale、rotate、skew方法講解!(11)
    • Animation & Property Animation 使用(9)
    • android動效開篇(8)
    • Android 漂浮類動效的分析與實現(xiàn)!(7)
    • 最新評論
    • 一個絢麗的loading動效分析與實現(xiàn)!

      碧海銀劍:@fanshouyizhi:大神,你這個demo很棒,不過進度會突然100%,不是平滑過渡的,而且到...

    • Android Paint之 setXfermode PorterDuffXfermode 講解

      george_zyf:頂樓主,開闊眼界了

    • Paint、Canvas、Matrix使用講解(一、Paint)

      Lgd_東:相恨見晚

    • 關(guān)于引入第三方j(luò)ar包引發(fā)的java.lang.NoClassDefFoundError解決

      聆聽璇律:studio怎么弄啊

    • 一個絢麗的loading動效分析與實現(xiàn)!

      jiong103:mOrangeRectF.right = mCurrentProgressPosition+mLef...

    • 一個絢麗的loading動效分析與實現(xiàn)!

      Liming4Android:好像demo中沒有加載到100%的時候那個風扇縮小和100%放大的那個代碼吧

    • 一個絢麗的loading動效分析與實現(xiàn)!

      Hebe_fans:這叫不難。。。我操

    • 自定義view實現(xiàn)水波紋效果

      隨手就是一巴掌叫你丫的做程序員:Bitmap too large to be uploaded into a texture (默認...

    • Android Paint之 setXfermode PorterDuffXfermode 講解

      隨手就是一巴掌叫你丫的做程序員:學習了,樓主辛苦!!!!

    • Android Paint之 setXfermode PorterDuffXfermode 講解

      W偉V:mark

    • 推薦文章
      • * 程序員10月書訊,評論得書
      • * Android中Xposed框架篇---修改系統(tǒng)位置信息實現(xiàn)自身隱藏功能
      • * Chromium插件(Plugin)模塊(Module)加載過程分析
      • * Android TV開發(fā)總結(jié)--構(gòu)建一個TV app的直播節(jié)目實例
      • * 架構(gòu)設(shè)計:系統(tǒng)存儲--MySQL簡單主從方案及暴露的問題
    id="iframeu2734128_0" src="http://pos.baidu.com/acrm?sz=200x200&rdid=2734128&dc=2&di=u2734128&dri=0&dis=0&dai=2&ps=2908x314&coa=at%3D3%26rsi0%3D200%26rsi1%3D200%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1478326006940&ti=Canvas%E4%B9%8Btranslate%E3%80%81scale%E3%80%81rotate%E3%80%81skew%E6%96%B9%E6%B3%95%E8%AE%B2%E8%A7%A3%EF%BC%81%20-%20Ajian_studio%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91&ari=2&dbv=2&drs=3&pcs=1829x1019&pss=1829x19885&cfv=0&cpl=4&chi=3&cce=true&cec=UTF-8&tlm=1478326006&rw=1019&ltu=http%3A%2F%2Fblog.csdn.net%2Ftianjian4592%2Farticle%2Fdetails%2F45234419&ecd=1&psr=1920x1080&par=1846x1080&pis=-1x-1&ccd=24&cja=false&cmi=6&col=zh-CN&cdo=-1&tcn=1478326007&qn=c31dff3e505510bd&tt=1478326006861.137.138.470" width="200" height="200" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0; vertical-align:bottom;margin:0;" allowtransparency="true"> <script type="text/javascript">(window['cproStyleApi'] = window['cproStyleApi'] ||{})['u2734128']={at:'3',rsi0:'200',rsi1:'200',pat:'6',tn:'baiduCustNativeAD',rss1:'#FFFFFF',conBW:'1',adp:'1',ptt:'0',titFF:'%E5%BE%AE%E8%BD%AF%E9%9B%85%E9%BB%91',titFS:'',rss2:'#000000',titSU:'0',ptbg:'90',piw:'0',pih:'0',ptp:'0'};/*服務(wù)器頻道首頁置頂Banner960*90,創(chuàng)建于2014-7-3*/(window.cproArray = window.cproArray || []).push({id:'u2734128'});</script> <script src="http://cpro.baidustatic.com/cpro/ui/c.js" type="text/javascript"></script> <script type="text/javascript" src="http://c.csdnimg.cn/rabbit/cnick/cnick.js"></script><script type="text/javascript" src="http://static.blog.csdn.net/scripts/newblog.min.js"></script><script type="text/javascript" src="http://medal.blog.csdn.net/showblogmedal.ashx?blogid=1298835"></script><script type="text/javascript" src="http://static.blog.csdn.net/scripts/JavaScript1.js"></script> rel="stylesheet" type="text/css" href="//csdnimg.cn/pubfooter/css/pub_footer_2014.css" />
    公司簡介 | 招賢納士 | 廣告服務(wù) | 銀行匯款帳號 | 聯(lián)系方式 | 版權(quán)聲明 | 法律顧問 | 問題報告 | 合作伙伴 | 論壇反饋
    網(wǎng)站客服 雜志客服 微博客服 webmaster@csdn.net 400-600-2320 | 北京創(chuàng)新樂知信息技術(shù)有限公司 版權(quán)所有 | 江蘇知之為計算機有限公司 | 江蘇樂知網(wǎng)絡(luò)技術(shù)有限公司
    src="about:blank" frameborder="0" scrolling="no" style="z-index:-1;position:absolute;top:0;left:0;width:100%;height:100%;background:transparent"> 您有 0條新通知 <script id="noticeScript" type="text/javascript" btnid="header_notice_num" wrapid="note1" count="5" subcount="5" src="//csdnimg.cn/rabbit/notev2/js/notify.js?9d86d94"></script> <script type="text/javascript" src="http://passport.csdn.net/content/loginbox/login.js"></script><script type="text/javascript">document.write(" ");</script> <script type="text/javascript" src="http://www.csdn.net/ui/scripts/Csdn/counter.js"></script><script type="text/javascript" charset="UTF-8" src="http://message.csdn.net/msg.popup.js"></script><script type="text/javascript" src="http://ad.csdn.net/scripts/ad-blog.js"></script><script type="text/javascript">$(function () { function __get_code_toolbar(snippet_id) { return $(" " + " "); } $("[code_snippet_id]").each(function () { __s_id = $(this).attr("code_snippet_id"); if (__s_id != null && __s_id != "" && __s_id != 0 && parseInt(__s_id) > 70020) { __code_tool = __get_code_toolbar(__s_id); $(this).prev().find(".tools").append(__code_tool); } }); $(".bar").show(); });</script> <script id="csdn-toolbar-id" btnid="header_notice_num" wrapid="note1" count="5" subcount="5" type="text/javascript" src="http://c.csdnimg.cn/public/common/toolbar/js/toolbar.js"></script> href="http://c.csdnimg.cn/comm_ask/css/ask_float_block.css" type="text/css" rel="stylesheet" /> <script language="JavaScript" type="text/javascript" src="http://c.csdnimg.cn/comm_ask/js/libs/wmd.js"></script> <script language="JavaScript" type="text/javascript" src="http://c.csdnimg.cn/comm_ask/js/libs/showdown.js"></script> <script language="JavaScript" type="text/javascript" src="http://c.csdnimg.cn/comm_ask/js/libs/prettify.js"></script> <script language="JavaScript" type="text/javascript" src="http://c.csdnimg.cn/comm_ask/js/apps/ask_float_block.js"></script> <script id="adJs52b5334" src="http://ads.csdn.net/js/opt/52b5334.js?t=0.2122191662760713"></script> <script>document.getElementById("adJs52b5334").src = "http://ads.csdn.net/js/opt/52b5334.js?t=" + Math.random();</script> rel="stylesheet" href="http://static.blog.csdn.net/css/blog_code.css" /> <script type="text/javascript" src="http://static.blog.csdn.net/scripts/saveToCode.js"></script> <script type="text/javascript" src="//csdnimg.cn/rabbit/tracking-ad/main.js?75eacd8"></script> rel="stylesheet" type="text/css" media="screen" href="http://ask.csdn.net/assets/ask_float_fonts_css-6b30a53970eb5c3a2a045e3df585b475.css" />

    提問

    您的問題將會被發(fā)布在“技術(shù)問答”頻道 × 該問題已存在,請勿重復(fù)提問 插入鏈接 本地上傳 網(wǎng)絡(luò)圖片 src="http://ask.csdn.net/upload.html"> 插入圖片 | | | | | | ?? 0 0 0:0 推薦標簽: 我要懸賞 取消 發(fā)布 可能存在類似的問題: 我想提一個新問題

    保存代碼片

    整理和分享保存的代碼片,請訪問代碼筆記
    • *標題
    • *描述
    • ?標簽 Canvasx android畫布x canvas.translatex canvas.scalex canvas.rotatex
    • 取消 確定

    總結(jié)

    以上是生活随笔為你收集整理的Canvas之translate、scale、rotate、skew的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    国产99免费视频 | 在线观看亚洲a | 免费成人在线视频网站 | 久久99久久久久久 | 国产精品久久久久影视 | a久久免费视频 | 国产黄色免费 | 五月天婷亚洲天综合网鲁鲁鲁 | 人人狠狠综合久久亚洲 | 国产精品福利小视频 | 国产在线欧美日韩 | 中文字幕人成人 | 国产999精品久久久久久绿帽 | 丁香在线视频 | 天天草视频 | 亚洲另类视频在线 | 国内99视频 | 成人午夜电影在线观看 | 亚洲最新av网址 | av成人在线看 | 91在线免费视频观看 | 日本精品中文字幕 | 欧美视频xxx | 国产一区精品在线观看 | 一区二区理论片 | 久99久中文字幕在线 | 激情一区二区三区欧美 | 中文字幕在线一二 | 国产手机在线精品 | 久久99热这里只有精品国产 | 日韩精品久久一区二区三区 | 亚洲理论影院 | www.com.日本一级 | 日韩精品一区二区三区外面 | 亚洲国产操 | 日韩欧美一区二区在线 | www.午夜色.com | 国产精品毛片一区二区三区 | 激情综合啪啪 | 亚洲一级免费观看 | 色在线免费| 国产高清一区二区 | 亚洲精品一区二区18漫画 | 国产乱老熟视频网88av | 日精品在线观看 | 久久久久一区二区三区四区 | 亚洲免费视频在线观看 | 高清国产在线一区 | 一级黄色电影网站 | 97香蕉久久国产在线观看 | 中文字幕免费高清av | 97国产大学生情侣酒店的特点 | 久久国产免费看 | 国产a精品| 久久久精品视频成人 | 国产五十路毛片 | 99精品99 | 日本黄色片一区二区 | www.亚洲精品| 日日爽天天 | 91网址在线看 | 国产高清绿奴videos | av在线看网站 | 久久毛片视频 | 免费高清在线视频一区· | 日本久久综合网 | 在线欧美国产 | 免费色黄 | 欧美黄色高清 | 日韩一级精品 | 中文字幕一区二区三区乱码不卡 | 国产日韩一区在线 | 国产亚洲激情视频在线 | 国产麻豆电影 | 国产69精品久久久久99尤 | 久久综合加勒比 | 91高清在线 | 91九色综合| 中文字幕五区 | 欧美性天天 | 久久99精品国产99久久6尤 | 国产麻豆视频免费观看 | 日韩一区在线播放 | 日韩精品中文字幕在线 | 日韩在线免费观看视频 | 国产女教师精品久久av | 国产精品一区二区三区观看 | 手机在线日韩视频 | 天堂网av 在线 | 国产糖心vlog在线观看 | 性色在线视频 | 亚洲三级网 | 狠狠伊人 | www.av中文字幕.com | 日韩在线免费高清视频 | 久久免费一级片 | 色999在线 | 亚洲成人一区 | 婷婷六月天丁香 | 天堂网一区 | 国产一区二区精品 | 一区二区欧美在线观看 | 精品产品国产在线不卡 | 免费精品国产va自在自线 | 色综合久久88色综合天天6 | 欧美网址在线观看 | 久久久资源网 | 伊人色综合久久天天网 | 久av电影| 国产丝袜 | 欧美日韩中文在线视频 | 免费韩国av | 韩日精品中文字幕 | 久草在线视频在线 | 91成人免费在线 | 麻豆视频免费观看 | 免费福利片 | 久久这里只有精品9 | 日韩午夜av | 国产精品久久久久aaaa九色 | 亚洲精品免费播放 | 欧美精品三级在线观看 | 日韩久久片 | 久久经典国产 | 国产亚洲精品久久久久久移动网络 | 久久手机看片 | 亚洲综合色激情五月 | 99久久久久国产精品免费 | 久久精品看| 国产免费久久久久 | 日韩av在线高清 | 久草免费福利在线观看 | 色九九在线 | 免费三级av| 久久久久国产精品免费免费搜索 | 日本中文字幕视频 | 丁香一区二区 | 日本中文字幕网站 | 欧美一区在线看 | 免费久久久 | 亚州成人av在线 | 中文字幕中文字幕 | 亚洲免费成人 | 日韩欧美精选 | av在线之家电影网站 | 亚洲第一中文网 | 久久精品国产免费 | 探花系列在线 | 人人澡人人爽 | 成年人在线免费视频观看 | 97高清视频| 一级α片免费看 | 手机av观看 | 婷婷电影网 | 久久免费成人网 | 东方av在| 亚洲视频 一区 | 日韩av手机在线看 | 中文字幕资源网 国产 | 久久婷婷影视 | av资源在线看 | 在线观看视频三级 | 在线观看免费av网 | 五月天六月婷婷 | 亚洲一区二区视频在线播放 | 亚洲91视频 | 国产一级片直播 | 免费日韩一区 | 中文字幕第一页av | 五月婷香蕉久色在线看 | 国产区久久 | 国产一区二区高清 | 免费亚洲视频在线观看 | 最近中文字幕 | 日韩高清在线一区 | 日韩精品久久中文字幕 | 91丨精品丨蝌蚪丨白丝jk | 97天堂网| av在线播放快速免费阴 | 91精品久久久久久综合五月天 | 久久精品视 | 久久影院午夜论 | 天天操夜夜做 | 最近日本中文字幕a | 欧美黄色成人 | 色噜噜狠狠色综合中国 | 91成人免费在线 | 亚洲成人影音 | 在线免费黄色毛片 | 精品国产精品久久 | 免费a视频在线 | 中文字幕av一区二区三区四区 | 精品成人国产 | 91禁在线看 | 中文字幕乱码日本亚洲一区二区 | 综合久久五月天 | 最新国产精品久久精品 | 国产精品久久精品 | 天天综合操 | 午夜国产福利在线观看 | 欧美影院久久 | 91久久国产自产拍夜夜嗨 | 在线观看日韩精品 | 亚洲天堂网在线视频 | 黄色小说免费在线观看 | 狠狠干 狠狠操 | 色99在线 | 国产一区精品在线 | 色五婷婷 | 粉嫩aⅴ一区二区三区 | 日韩精品一卡 | 国产精品18久久久久久久网站 | 日韩成人看片 | 日韩网站在线免费观看 | 色噜噜在线观看视频 | 91成人区 | 日韩高清www | 成 人 免费 黄 色 视频 | 久草视频首页 | 摸bbb搡bbb搡bbbb | 五月开心六月伊人色婷婷 | 天天干人人插 | 国产91区| 亚洲视频专区在线 | 国内成人精品2018免费看 | 欧美国产日韩中文 | av一区二区三区在线 | 久久久国产精品免费 | 免费观看一级一片 | 成 人 黄 色 免费播放 | 99精品福利 | 波多野结衣电影一区二区三区 | 人人干人人模 | 久久免费看av | 久久久免费精品国产一区二区 | 久久久精品网站 | 97视频网站 | 久久夜av | 国产精品毛片一区二区 | 成人黄色av免费在线观看 | 91尤物国产尤物福利在线播放 | 九九免费视频 | 国产高清绿奴videos | 婷婷六月色| 波多野结衣电影一区二区三区 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 99在线观看精品 | 久久www免费人成看片高清 | 日韩精品免费在线观看视频 | 久久电影国产免费久久电影 | 中文字幕av一区二区三区四区 | 亚洲精品国产精品国自产 | 91精品国产高清自在线观看 | 亚洲区视频在线观看 | 色中色亚洲| 日韩欧美99 | 国产黄色片久久 | 国产在线看 | 91成年人在线观看 | 美女免费网视频 | 黄色小视频在线观看免费 | 成人啪啪18免费游戏链接 | 四虎最新入口 | 中文字幕亚洲综合久久五月天色无吗'' | 国产精品一区二区吃奶在线观看 | 成年美女黄网站色大片免费看 | 人人爽人人| 国产成人av在线影院 | 精品久久99 | 国产午夜精品一区二区三区欧美 | 右手影院亚洲欧美 | 在线观影网站 | 欧洲精品码一区二区三区免费看 | 91成人网在线观看 | 色综合天天狠天天透天天伊人 | 国产精品孕妇 | 国产一区二区三区高清播放 | 久久精品aaa | 丁香久久综合 | 久久久久亚洲国产精品 | 国产高清精| 色婷婷影视 | 99久久日韩精品免费热麻豆美女 | 粉嫩av一区二区三区入口 | 亚洲精品mv在线观看 | 日日综合网 | 日日夜夜国产 | 久久久综合九色合综国产精品 | 日韩电影一区二区在线 | 国产精品久久久久久久久久久久久 | 国产精品尤物 | 精品免费一区 | 毛片的网址 | 一区二区三区四区在线免费观看 | 久久99视频精品 | 色婷婷综合久久久久中文字幕1 | 91欧美在线 | 国产精品久久久久久久久久三级 | 在线一二三区 | 精品日韩中文字幕 | 99精品视频在线观看播放 | 久久久久免费 | h久久| 中文字幕日本电影 | 91麻豆文化传媒在线观看 | 99国内精品久久久久久久 | 色播激情五月 | 国产精品精品久久久 | 在线av资源| 激情五月综合 | 亚洲在线网址 | 国产免费片 | 久久久在线视频 | 久久狠狠亚洲综合 | 久久久高清| 久操视频在线观看 | 欧美坐爱视频 | 亚洲一区日韩 | 日韩久久精品一区二区三区 | 国内亚洲精品 | 国产一区二区久久精品 | 亚洲视频精品在线 | 黄色三级在线 | 91在线亚洲 | 久久99久久99 | 99精品欧美一区二区蜜桃免费 | 玖玖视频国产 | 国产精品久久久久久久久久久久 | 色综合天天综合网国产成人网 | 国产又粗又长又硬免费视频 | 手机成人av | 日本久久成人 | 亚洲综合色视频在线观看 | 国内亚洲精品 | 91久久久久久久一区二区 | 激情久久五月天 | 99精品在线观看视频 | 久久久久国产精品午夜一区 | 亚洲欧美日韩国产精品一区午夜 | av电影免费在线播放 | 97视频人人澡人人爽 | 狠狠的操狠狠的干 | 欧美影院久久 | 尤物97国产精品久久精品国产 | 欧美日韩在线观看一区二区三区 | 999在线观看视频 | 五月天网页 | 91亚色视频在线观看 | 亚洲欧美视频在线播放 | 狠狠色狠狠综合久久 | 99久久99久国产黄毛片 | 人人爽夜夜爽 | 亚洲在线视频播放 | 国产黄| 午夜精品成人一区二区三区 | 日韩网站一区 | 午夜免费视频网站 | 狠狠综合网 | 久久久www免费电影网 | 国产中文字幕一区 | 久久久久免费精品国产小说色大师 | 狠狠操综合 | 99这里只有精品视频 | 亚洲成人资源在线观看 | 91桃花视频 | 激情校园亚洲 | av一级网站 | 久久电影日韩 | 青草视频在线 | 日本精品视频免费 | 在线观看中文字幕2021 | 久久久久久久久久久免费视频 | 最近中文字幕免费大全 | 国产不卡视频 | 亚洲天堂免费视频 | 国产亲近乱来精品 | 中文字幕免费观看 | 人人舔人人爱 | 国产免费嫩草影院 | 国产成人久久精品77777综合 | 在线观看播放av | 精品国产成人av | www.五月婷婷 | 精品视频www | 天天操人人要 | 国产精品男女 | 久久影视精品 | 婷婷丁香导航 | 亚州欧美视频 | 欧美福利视频一区 | 免费看日韩 | 久草影视在线 | 9999免费视频 | 免费网站污 | 九色精品| 国产黄色片网站 | 日韩资源视频 | 黄色三级视频片 | 福利片视频区 | www.99在线观看 | 久久精品视频在线 | 久久网站最新地址 | 91av视频导航 | www..com黄色片 | 色婷婷国产在线 | 欧美日韩高清一区二区三区 | 在线观看视频一区二区三区 | 欧美一级网站 | 亚洲免费视频观看 | 欧美日韩视频在线 | 91麻豆精品国产91久久久久久 | 在线高清av | 精品女同一区二区三区在线观看 | 91成人短视频在线观看 | 亚洲视频电影在线 | 美女中文字幕 | 在线免费91 | 韩国av一区二区三区 | 国产视频一级 | 午夜精品av | 久久国产精品视频 | 欧美一级视频免费看 | a爱爱视频| 亚洲视频一区二区三区在线观看 | 国产成人精品一区二区三区在线观看 | 99国产在线视频 | 一区二区三区电影大全 | 亚洲精品乱码久久 | 欧美91精品久久久久国产性生爱 | 国产欧美精品在线观看 | 91桃色视频 | 日韩av不卡在线 | 娇妻呻吟一区二区三区 | 黄色一区三区 | 日韩精品久久久久 | 久久久亚洲电影 | 国产精品久久久久久电影 | 狠狠色噜噜狠狠狠合久 | 国外成人在线视频网站 | 中文字幕在线观看一区二区 | 国产精品美女免费看 | 欧美精品久久久久久久亚洲调教 | 亚洲一区二区高潮无套美女 | 99精品国产一区二区三区不卡 | 美女视频国产 | 国产精品大尺度 | 综合天天网 | 992tv在线| 又湿又紧又大又爽a视频国产 | 久久久免费| 天天伊人狠狠 | 色综合久久久久久中文网 | 天天射天天做 | 免费在线播放av电影 | 日韩精品久久久免费观看夜色 | 久久狠狠干 | 亚洲精品久久久久58 | 日本成址在线观看 | 天天操天天怕 | 亚洲一二三区精品 | 美女搞黄国产视频网站 | 国产亚洲精品久久久久久 | 久久精品2 | 亚洲综合一区二区精品导航 | 精品国产免费人成在线观看 | 不卡的av电影 | 色多多在线观看 | 久久亚洲国产精品 | 成人黄色小说在线观看 | 五月精品| 综合激情网 | 久久久免费 | 在线成人av | 黄色av电影在线 | 国产精品精品久久久久久 | 成年人网站免费观看 | www.狠狠色 | 欧美性生活久久 | 婷婷丁香国产 | 精品国产一区二区三区在线 | 国产午夜在线观看视频 | 国产精品久久久久久久久久久久久久 | 91精品专区| 久久综合激情 | 精品久久中文 | 国产精品精品视频 | 国内丰满少妇猛烈精品播 | 亚洲成av人片在线观看无 | 亚洲午夜av电影 | 午夜电影一区 | 国产精品videoxxxx | 欧美精品久久久久久久久久久 | 欧美日韩精品在线播放 | 国产一区二区在线免费播放 | 香蕉久久久久久av成人 | www.在线观看av| 精品国产乱码久久久久久浪潮 | 亚洲综合激情小说 | 午夜在线免费观看 | 欧美成人性战久久 | 狠狠天天 | 亚洲资源 | 91久久久久久久一区二区 | 久久女同性恋中文字幕 | 亚洲网站在线看 | 91免费高清视频 | 国产亚洲精品电影 | 国产美腿白丝袜足在线av | 欧美大片在线看免费观看 | 成年人av在线播放 | 欧美在线视频不卡 | 青青五月天 | 久草在线视频免费资源观看 | 911精品视频 | 国产一区精品在线 | 亚洲视频在线看 | 天天艹天天爽 | 中文字幕欧美日韩va免费视频 | 亚洲综合欧美精品电影 | 99热99| 国产精选在线观看 | 成人黄色短片 | 亚洲高清国产视频 | 亚洲一区网 | 91精品久久久久久粉嫩 | av 一区 二区 久久 | 日日夜夜操av | 免费观看一级 | 国产日韩欧美精品在线观看 | 天天爱天天操天天爽 | 激情电影影院 | 视频在线观看一区 | 国产精品不卡在线播放 | 99色免费 | 久久伊人婷婷 | 久久综合影院 | 丁香 婷婷 激情 | 亚洲国产日韩一区 | 四虎国产精品成人免费影视 | 成人午夜网| 成人综合婷婷国产精品久久免费 | 亚洲激情 在线 | 日本精品久久久久久 | 日本性生活免费看 | 久草影视在线观看 | 国产精品综合久久 | 中文字幕视频一区二区 | 青青河边草免费视频 | 国产91综合一区在线观看 | 国产一区二区三区午夜 | 91在线公开视频 | www.久久精品视频 | 91看片淫黄大片在线播放 | 国产精品18久久久久久不卡孕妇 | 欧美在线观看视频免费 | 超碰在线天天 | 日韩在线小视频 | 99国内精品久久久久久久 | 日韩精品第1页 | 999久久久免费视频 午夜国产在线观看 | 欧美日韩在线电影 | 亚洲欧美视频在线播放 | 五月婷婷深开心 | a'aaa级片在线观看 | 狠狠操狠狠操 | 亚洲观看黄色网 | 久久精品爱爱视频 | 国产日韩中文字幕在线 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产视频一区二区在线观看 | 欧美另类视频 | 国产91欧美 | 黄网在线免费观看 | 国产精品久99 | 国产伦精品一区二区三区高清 | 色婷婷av国产精品 | 久久国产精品系列 | 色a综合 | 亚洲在线国产 | 久久国产精品视频免费看 | 97夜夜澡人人爽人人免费 | 日韩精品电影在线播放 | 夜夜操天天干 | 在线视频 精品 | www.久久精品视频 | 黄色美女免费网站 | 麻豆91精品91久久久 | 成人av在线亚洲 | 国产精品久久久久一区二区三区 | 狠狠色噜噜狠狠狠狠 | 久久免费观看视频 | 肉色欧美久久久久久久免费看 | 国产亚洲成人网 | 久久精品xxx | av网址aaa| 五月开心六月伊人色婷婷 | 亚洲干视频在线观看 | 久久怡红院| 在线www色| 精品国产一区二区三区免费 | 天堂av在线网站 | 国产精品不卡一区 | 欧美巨大荫蒂茸毛毛人妖 | 国产黄av| 婷婷在线观看视频 | 91久久偷偷做嫩草影院 | 91精品久久久久 | 91免费在线 | 欧美精品一区二区三区一线天视频 | 国产又粗又猛又色 | www激情com| av在线免费观看网站 | 国产亚洲精品久久 | 人人添人人澡人人澡人人人爽 | 中文字幕日韩av | 五月天色丁香 | 黄色免费看片网站 | 久久精品国产亚洲精品2020 | 亚洲成人资源在线观看 | 欧美伦理一区二区 | 最近中文字幕免费av | 国产极品尤物在线 | 国产一二三四在线视频 | 国产精品色婷婷视频 | 亚洲精品国精品久久99热一 | 天天色视频 | 亚洲欧洲精品视频 | 久久免费看av | 日韩在线视频线视频免费网站 | 国产在线91精品 | 91av视频在线免费观看 | 四虎成人精品永久免费av | 精品国产乱码久久久久久1区2匹 | 久久久精品综合 | av片无限看 | 麻豆视频入口 | 国产成人精品久久久 | 久久精品站 | 国产中年夫妇高潮精品视频 | 国产成人久久av | 国产精品国产自产拍高清av | 午夜美女福利 | 亚洲区另类春色综合小说校园片 | 久久9999久久 | 色婷婷久久一区二区 | 国产高清av在线播放 | 久久不射电影院 | 亚洲国产精品一区二区久久,亚洲午夜 | 91成人看片| 亚洲精品乱码久久久久 | 九九久久免费视频 | 日韩av免费在线电影 | 久久精品免费电影 | 亚洲免费不卡 | 国产日韩精品在线观看 | 欧美色伊人 | 婷婷在线免费视频 | 奇米网网址 | 国产中文字幕三区 | 久久福利电影 | 日韩电影在线观看一区二区三区 | 国产视频亚洲精品 | 一本一道波多野毛片中文在线 | 国产精品情侣视频 | 日韩福利在线观看 | 国产精品一区二区三区在线 | 日韩三级一区 | 福利一区在线 | av福利免费 | 日本天天操 | 香蕉蜜桃视频 | 色999五月色 | 视频91在线 | 久久久久国产成人免费精品免费 | 精品美女国产在线 | 欧美十八 | 国产高清专区 | 午夜在线日韩 | 精品久久久久久一区二区里番 | 波多野结衣视频在线 | 又黄又爽的免费高潮视频 | 国产亚洲精品久久 | 免费男女羞羞的视频网站中文字幕 | 久久这里有精品 | 97视频入口免费观看 | 亚洲人成人在线 | 亚洲男男gaygay无套 | 亚洲精品视频二区 | 激情五月婷婷丁香 | avav片| 午夜视频在线观看一区二区三区 | 少妇高潮流白浆在线观看 | 九九久久影视 | 毛片网站免费 | 久久99热精品这里久久精品 | 婷婷中文字幕在线观看 | 国产成人久久精品77777综合 | 91亚·色 | 免费能看的黄色片 | 黄色免费观看视频 | 亚洲成人一二三 | 久草免费新视频 | 夜夜夜夜夜夜操 | 日韩视频一区二区在线观看 | 国产午夜视频在线观看 | 国产中文字幕免费 | 久久国产品 | 欧美精品在线观看免费 | 干综合网 | 深爱激情久久 | 五月天天天操 | 久久综合加勒比 | 国产精品一区二区三区观看 | 精品视频97 | 久久深夜福利免费观看 | 日韩精品免费在线观看 | 日韩字幕| 国产不卡av在线播放 | 久久久久久久久久久久久影院 | 欧美 日韩 国产 中文字幕 | 国产精品99久久99久久久二8 | 色综合色综合久久综合频道88 | av中文字幕在线电影 | 国产精品第54页 | 免费观看版 | 国产视频在线播放 | 久久久鲁 | 国产视频一区二区在线观看 | 黄色影院在线播放 | 欧美精品午夜 | 欧美性色综合网站 | 91久久国产自产拍夜夜嗨 | 久久一级电影 | 开心综合网 | 日韩伦理片一区二区三区 | av在线播放快速免费阴 | 天堂在线一区 | 国产精品色婷婷视频 | 在线免费视频a | 日韩精品在线看 | 99中文在线 | 日韩av综合网站 | 国产精品一区二区在线观看免费 | 超碰在线人人爱 | 日韩午夜三级 | 精品一区二三区 | 久久一区国产 | 国产精品18毛片一区二区 | 国产成人精品女人久久久 | 国产精品热视频 | 亚洲成av人影片在线观看 | 精品在线观 | 久久久久久国产精品999 | 国产激情电影综合在线看 | 亚洲综合欧美日韩狠狠色 | 91热爆视频 | 91av在 | 欧美另类xxx | 二区视频在线观看 | 国产91全国探花系列在线播放 | 欧美日韩免费一区二区 | 一区二区三区日韩在线 | 国内精品福利视频 | 色噜噜狠狠狠狠色综合久不 | 中文字幕一二 | 91免费高清 | 中文字幕欧美激情 | 国产精品淫片 | 成人在线观看你懂的 | 久久新视频| 国产精品网红直播 | 五月婷婷播播 | 一级片视频免费观看 | 韩国在线一区二区 | 中文字幕一区二区三区在线观看 | 超碰97免费观看 | 成片免费观看视频999 | 色综合久久久久久久久五月 | 免费欧美高清视频 | 免费看污黄网站 | 婷婷丁香狠狠爱 | 久草免费福利在线观看 | 国产精品福利在线观看 | 婷婷五天天在线视频 | 亚洲一区天堂 | 超碰在线色 | 不卡中文字幕在线 | 500部大龄熟乱视频使用方法 | 丁香视频在线观看 | 欧美性一级观看 | 中文字幕黄色 | 96亚洲精品久久久蜜桃 | 成人在线视频免费观看 | 超碰免费公开 | 国产精品99久久99久久久二8 | 五月婷婷狠狠 | 欧洲视频一区 | 免费在线观看中文字幕 | 成人免费看片网址 | 免费97视频 | 911精品美国片911久久久 | 久久视频国产精品免费视频在线 | 国产亚洲一区二区在线观看 | 亚洲资源一区 | 国产亚洲在线 | 中文在线√天堂 | 日日夜夜精品视频天天综合网 | 国产欧美久久久精品影院 | 五月激情亚洲 | 91正在播放 | www亚洲视频 | 日韩欧美国产视频 | 中文字幕在线日亚洲9 | 天天操天天爽天天干 | 国产一级片视频 | 免费福利片| 婷婷中文字幕在线观看 | 91视频在线网址 | 欧洲一区二区在线观看 | 射九九 | 国产亚州精品视频 | av亚洲产国偷v产偷v自拍小说 | 中文字幕日韩国产 | 国产免费又爽又刺激在线观看 | 大胆欧美gogo免费视频一二区 | 国产成人精品一区二区三区在线观看 | 天天天天综合 | 中国一级特黄毛片大片久久 | 欧美日韩亚洲国产一区 | 久久精品视频在线免费观看 | 在线观看成人国产 | 99久久99精品 | 日韩在线一级 | 国产在线自 | 免费无遮挡动漫网站 | 天天爽夜夜爽人人爽一区二区 | 精品国产午夜 | 17婷婷久久www | 国产精品福利小视频 | 国产精品成人国产乱一区 | 国产精品无 | 97色se| 国产a国产a国产a | 91午夜精品 | 国产视频 久久久 | 国产精品一区二区三区在线播放 | 成人精品视频 | 国产免费av一区二区三区 | 深爱婷婷 | 91香蕉视频在线 | 亚洲少妇激情 | 日韩欧美在线免费 | 婷婷丁香色 | 国产麻豆果冻传媒在线观看 | 精品国模一区二区三区 | 在线观看亚洲成人 | 国产视频一区二区在线播放 | 久久99九九99精品 | 91视频免费看片 | 国产成人高清av | 久久视| 婷婷在线播放 | 成人午夜电影久久影院 | 97偷拍在线视频 | 精品免费一区二区三区 | 婷婷色网站 | 九九亚洲精品 | 午夜黄色大片 | 亚洲视频www | 日本少妇视频 | 欧美日韩一区二区三区在线免费观看 | 日韩精品在线视频免费观看 | 高清国产一区 | www.超碰| 久久久91精品国产一区二区精品 | 日本 在线 视频 中文 有码 | 成人av影院在线观看 | 亚洲成人国产 | 久久你懂得 | 国产精品一区二区三区免费看 | 6080yy精品一区二区三区 | 久久久久久久久久影视 | 精品在线视频一区二区三区 | 久久久久女人精品毛片 | 欧美日韩不卡在线视频 | 97精品国产97久久久久久免费 | 日本99精品 | 99精品视频在线看 | 五月婷婷丁香激情 | 国色综合 | 婷婷激情小说网 | 在线一二三区 | 久久久五月婷婷 | 国产免费人成xvideos视频 | 亚洲视频精选 | 爱爱av在线 | 国产一级性生活 | 六月婷操 | 天堂久久电影网 | 探花视频免费观看 | 天天操天天干天天操天天干 | www.久久爱.cn | 亚洲成人国产 | 九九精品视频在线观看 | wwwwwww色| 亚洲高清视频在线观看 | 欧美三级免费 | a在线一区| 免费观看国产精品视频 | 亚洲欧洲国产视频 | 在线电影日韩 | 中文日韩在线 | 午夜婷婷综合 | 免费看污污视频的网站 | 亚洲v欧美v国产v在线观看 | 久久9999久久免费精品国产 | 日韩免费成人 | 国产99久久久国产精品成人免费 | 正在播放国产一区二区 | 18久久久 | 日韩在线理论 | 国产91在线看 | 91热视频 | 国产精品久久久久久一区二区三区 | 青草视频在线播放 | 午夜男人影院 | 精品电影一区 | 99福利影院 | 国产亚洲小视频 | 色偷偷888欧美精品久久久 | 国产视频精品免费 | 天天干天天综合 | 在线观看午夜 | 天天综合视频在线观看 | 最新中文字幕在线资源 | 免费中文字幕视频 | 亚洲成人资源 | 日韩免费视频在线观看 | 免费视频久久久 | 99在线观看精品 | 久艹视频在线观看 | 伊人色**天天综合婷婷 | 国产精品男女视频 | 中文字幕最新精品 | 夜色成人网 | 久久精品国产99国产 | www.五月婷婷.com| www毛片com| freejavvideo日本免费 | 欧美国产高清 | 精品久久一区二区 | 丁香婷婷网 | 免费久久久久久久 | 精品在线二区 | 波多野结衣在线视频一区 | 国产精品久久久区三区天天噜 | 久久99精品国产麻豆婷婷 | 亚洲最新合集 | 国产99在线免费 | 超碰人人射 | 国产精品手机在线播放 | 久久国产精品一区二区三区 | 天天曰夜夜爽 | 国产精品亚洲a | 欧美高清视频不卡网 | 日日操天天爽 | 99精品国产免费久久 | 国产精品一区二区精品视频免费看 | 四虎在线免费视频 | 久久av中文字幕片 | 国产美女精品视频免费观看 | 日韩av免费在线电影 | 亚洲成人软件 | sesese图片 | 高清视频一区 | 悠悠av资源片 | 三级黄在线 | 天天射综合 | 久久只有精品 | 国产精品欧美一区二区三区不卡 | 国产黄色av网站 | 国产精品高 | 97av超碰| 久久婷婷精品 | 日韩中文字幕亚洲一区二区va在线 | 91久久丝袜国产露脸动漫 | 在线观看av麻豆 | 色激情在线 | 狠狠色综合网站久久久久久久 | 午夜少妇av | 欧美天天干 | 99精品欧美一区二区三区黑人哦 | 伊人手机在线 | 久久精品视 | 色午夜影院 | 激情av一区二区 | 在线国产福利 | 久青草国产在线 |