㈠ html5 canvas在安卓上有什麼坑嗎
目前在做微信公眾平台 ,使用到canvas繪制圖片,在某些設備上出現偶爾無法繪制的問題。
目前測試出現在 oppo R8007 小米s1上,代碼是最最簡單的代碼,比如繪制一行字,畫矩形等,均出現間歇性的無法繪制的問題。
㈡ 怎麼對canvas繪制的一條線進行監聽 android
我想繪制油畫一條線的片段內。經過一番研究,就顯得我只是不得不延長View類並重寫的onDraw,然後回到我的新View類的一個實例,我通常會膨脹的布局。然而,當我進入設備上的片段我看到的是一個白色的屏幕。以下是我迄今為止:
包com.example.testing;進口android.app.Fragment;
進口android.content.Context;
進口android.graphics.Canvas;
進口android.graphics.Color;
進口android.graphics.Paint;
進口android.os.Bundle;
進口android.util.AttributeSet;
進口android.view.LayoutInflater;
進口android.view.View;
進口android.view.ViewGroup;公共類LineTab擴展片段
{ 私有類DrawView擴展視圖{
塗料粉刷=新的油漆(); 公共DrawView(上下文的背景下){
超級(上下文);
paint.setColor(Color.BLACK);
}
公共DrawView(上下文的背景下,ATTRS的AttributeSet){
超(背景下,ATTRS);
paint.setColor(Color.BLACK);
}
公共DrawView(上下文的背景下,ATTRS的AttributeSet,詮釋defStyle){
超(背景下,ATTRS,defStyle);
paint.setColor(Color.BLACK);
} @覆蓋
保護無效的onDraw(帆布油畫){
super.onDraw(畫布); canvas.drawLine(0,0,50,50,油漆);
canvas.drawLine(50,0,0,50,漆);
} @覆蓋
保護無效onMeasure(INT widthMeasureSpec,詮釋heightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec); INT上級寬度= MeasureSpec.getSize(widthMeasureSpec);
INT上級高度= MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(上級寬度,上級高度);
}
} @覆蓋
公共查看onCreateView(LayoutInflater充氣器,容器的ViewGroup,捆綁savedInstanceState){
super.onCreateView(充氣器,容器,savedInstanceState); 返回新DrawView(this.getActivity());
}
}
㈢ android怎麼移動canvas
我們可以把這個Canvas理解成系統提供給我們的一塊內存區域(但實際上它只是一套畫圖的API,真正的內存是下面的Bitmap),而且它還提供了一整套對這個內存區域進行操作的方法,所有的這些操作都是畫圖API。也就是說在這種方式下我們已經能一筆一劃或者使用
Graphic來畫我們所需要的東西了,要畫什麼要顯示什麼都由我們自己控制。
這種方式根據環境還分為兩種:一種就是使用普通View的canvas畫圖,還有一種就是使用專門的SurfaceView的canvas來畫圖。兩種的主要是區別就是可以在SurfaceView中定義一個專門的線程來完成畫圖工作,應用程序不需要等待View的刷圖,提高性能。前面一種適合處理量比較小,幀率比較小的動畫,比如說象棋游戲之類的;而後一種主要用在游戲,高品質動畫方面的畫圖。
Paint 代表了Canvas上的畫筆、畫刷、顏料等等;
Paint類常用方法:
setARGB(int a, int r, int g, int b) // 設置 Paint對象顏色,參數一為alpha透明值
setAlpha(int a) // 設置alpha不透明度,范圍為0~255
setAntiAlias(boolean aa) // 是否抗鋸齒
setColor(int color) // 設置顏色,這里Android內部定義的有Color類包含了一些常見顏色定義
setTextScaleX(float scaleX) // 設置文本縮放倍數,1.0f為原始
setTextSize(float textSize) // 設置字體大小
setUnderlineText(booleanunderlineText) // 設置下劃線
// 1、將會以顏色ARBG填充整個控制項的Canvas背景
//mCanvas.drawARGB(122, 10, 159, 163) ;
// 2、將會以顏色ARBG填充整個控制項的Canvas背景
//mCanvas.drawColor(Color.BLUE) ;
// 3、繪制顏色,但是要制定一個mode
//mCanvas.drawColor(Color.BLUE, Mode.SCREEN) ;
// 4、畫背景,跟2等效
//mCanvas.drawPaint(mPaint) ;
// 5、畫一個點
//mCanvas.drawPoint(23, 23, mPaint) ;
// 6、畫很多點這里的float[] 表示{x0,y0,x1,y1,x2,y2,x3,y3.....}
//mCanvas.drawPoints(new float[]{10,11,10,12,10,13,10,14,10,15,10,16}, mPaint) ;
// 7、畫線
//mCanvas.drawLine(...) ;
// 8、畫長方形 Rect 和RectF的區別?
//精度不一樣,Rect是使用int類型作為數值,RectF是使用float類型作為數值
//Rect r = new Rect(10,10,50,50) ;
//mCanvas.drawRect(r, mPaint) ;
//RectF rf = new RectF(10,10,50,50) ;
//mCanvas.drawRect(rf, mPaint) ;
//mCanvas.drawRect(10, 10, 50, 50, mPaint) ;
// 9、畫橢圓 初始化RectF的參數是(left,top,right,bottom)
//RectF rf = new RectF(100,100 ,200 ,250) ;
//mCanvas.drawOval(rf, mPaint) ;
// 10、畫圓 (圓心x0,圓心y0,半徑,paint)
//mCanvas.drawCircle(100, 100, 50, mPaint) ;
// 11、畫圓弧 RectF對象表明內切矩形的(left,top,right,bottom)
//RectF rf = new RectF(100 ,100 ,200 ,200) ;
// 參數(rf,startAngle ,angle ,sweepAngle ,paint) sweepAngle表明是否顯示圓弧三角形 angle畫多少度
//mCanvas.drawArc(rf, 60, 30, true, mPaint) ;
// 12、繪制圓角矩形 RectF是矩形的(left,top,right,bottom)
//RectF rf = new RectF(100 ,100 ,200 ,200) ;
// 50表明x方向的半徑,20表示y方向的半徑
//mCanvas.drawRoundRect(rf, 50, 20, mPaint) ;
// 13、畫任意多邊形
//Path path = new Path() ;
//path.moveTo(100, 100) ;
//path.lineTo(200, 200) ;
//path.lineTo(300, 200) ;
//mCanvas.drawPath(path, mPaint) ;
// 14、通過Path對象,也可以畫其他的圖形
//Path path = new Path() ;
//path.addCircle(100, 100, 20, Path.Direction.CCW) ;
//mCanvas.drawPath(path ,mPaint);
/*drawBitmap
drawText
drawPicture*/
/*Rect r = new Rect(100,100,200,200) ;
ByteArrayOutputStream out = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out) ;
InputStream in = new ByteArrayInputStream(out.toByteArray()) ;
*/
/*Picture picture = Picture.createFromStream(mContext.getResources().openRawResource(R.raw.bg)) ;
mCanvas.drawPicture(picture) ;*/
// 15、畫bitmap對象
//mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg),100, 100, mPaint) ;
// 16、Matrix中包含了對Bitmap的處理操作
/*Matrix m = new Matrix() ;
m.postScale(2, 2) ;
m.postRotate(60) ;
mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg), m, mPaint) ;*/
// 17、畫帶Matrix參數的bitmap,經過Matrix對象可以對bitmap做相關的處理,比如旋轉,縮放,移動等《關於Matrix的使用另行總結》
/*Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;
Matrix m = new Matrix() ;
m.postScale(2, 2) ;
m.postRotate(60) ;
m.postTranslate(300, 300) ;
mCanvas.drawBitmap(bitmap, m, mPaint) ;*/
//mCanvas.drawBitmap(....) ; 暫不總結
// 18、畫文字
//mCanvas.drawText(123, 10, 10, mPaint) ;
//mCanvas.drawText(....)
㈣ android 上用canvas繪圖之後,我想清除怎麼辦
canvas繪圖是在onDraw里觸發的。而每次onDraw的時候,其實是重新繪制canvas數據的,也就是如果你什麼都不畫,canvas上就沒有東西了。因此你只要在每次觸發onDraw之後,把需要畫的內容畫出來即可。比如,假設人頭的數據是bitmapHead,兩種發型分別是bitmapStyle1, bitmapStyle 2,你就可以這樣畫(偽代碼):
java">intcurrentType=0;
onDraw(canvas){
canvas.draw(bitmapHead);//這個是必定要畫的
switch(currentType){
caseSTYLE1:
canvas.draw(bitmapStyle1);
break;
caseSTYLE2:
canvas.draw(bitmapStyle2);
break;
}
}
㈤ Android 里canvas 繪制了兩個矩形,交叉位置顏色重疊
既然疊加在一起,那最上面那個肯定會覆蓋下面的,所以你看能不能把疊加部分(兩個矩形疊加的部分也是矩形)的位置和寬高計算出來,然後再畫一個計算出來的矩形覆蓋在最上面,顏色就用疊加效果的顏色,這樣看起來效果應該就是兩個疊加的矩形,但實際上是畫了3個矩形。
希望能幫到你
㈥ 如何將canvas復制給另外一個canvasRT.android支持這種操作么
寫了這么多AngularJS代碼,可以說我對AngularJS了解比較深入了。Backbone也是一個很熱門的JS框架,我通讀了一下它的API文檔,大概了解了他的運行機制。
Backbone很精巧,很強大。但對比AngularJS,我說說我看到的Backbone的缺點,由於接觸時間短,可能會存在誤解,見諒。
Backbone的Model把伺服器端的數據模型映射到瀏覽器端,綁定數據驗證機制,並與相應的REST操作綁定,這樣每個數據模型都變成了獨立體,方便REST操作,卻限制REST的靈活性。比如我要將10個todo批量標記成已完成,它會發出10個REST請求。
Backbone的Model沒有與UI視圖數據綁定,而是需要在View中自行操作DOM來更新或讀取UI數據,這點很奇怪。AngularJS與此相反,Model直接與UI視圖綁定,Model與UI視圖的關系,通過directive封裝,AngularJS內置的通用directive,就能實現大部分操作了,也就是說,基本不必關心Model與UI視圖的關系,直接操作Model就行了,UI視圖自動更新。而Model數據驗證、與伺服器端的數據交互都是非常簡單而自由的。
㈦ android 4.1什麼瀏覽器支持html5 canvas渲染最好
可以直接使用android自帶的webview來載入html進行 canvas渲染。
WebView(網路視圖)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁,實現WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實例化WebView組件:WebView webView = new WebView(this);
2.調用WebView的loadUrl()方法,設置WevView要顯示的網頁:
互聯網用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.調用Activity的setContentView( )方法來顯示網頁視圖
4.用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加許可權,否則會出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET" />
第二種方法的步驟:
1、在布局文件中聲明WebView
2、在Activity中實例化WebView
3、調用WebView的loadUrl( )方法,設置WevView要顯示的網頁
4、為了讓WebView能夠響應超鏈接功能,調用setWebViewClient( )方法,設置 WebView視圖
5、用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
6、需要在AndroidManifest.xml文件中添加許可權,否則出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET"/>
㈧ Android 如何在canvas上層顯示其他控制項
我是在activity裡面對控制項所在的relativelayout進行了scrollBy,這樣就會出現繪制不出屏幕外的那部分,是因為控制項限制了大小么?該怎麼寫比較好,這是我的拖動代碼@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: currentX = (int) event.getRawX(); currentY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_MOVE: int x2 = (int) event.getRawX(); int y2 = (int) event.getRawY(); container.scrollBy(currentX-x2 , currentY-y2 ); currentX=x2; currentY=y2; metroView.invalidate(); default: break; } return super.onTouchEvent(event); }
㈨ android開發問題: 在Activity主界面繪制畫布,可是它把整個窗口都覆蓋掉了,怎麼設定畫布的窗口大小呢(
你是說View占滿了整個屏幕嗎?這樣的話就只能在layout中寫一個布局文件,將View以一種組件的方式聲明到.xml文件中,然後你可以在它的上下中聲明其他的button或者textview或者ImageButton等。