Ⅰ android 我用Path 繪制了一條曲線,想為這條曲線每段設置個滑動事件,就是從這段線滑過就彈出個對話框
添加一個監視器應該可以吧。onmouseover觸發事件。java有這個方法。
Ⅱ 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:如下關於繪制圓角矩形邊框問題,怎麼解決
paint.setAntiAlias(true);
嘗試在畫筆上設置抗鋸齒
Ⅳ android 百度地圖上怎麼畫線,畫圓
//代碼如下
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Paint.Style;
importandroid.graphics.Path;
importandroid.graphics.Point;
importandroid.os.Bundle;
importcom..mapapi.BMapManager;
importcom..mapapi.GeoPoint;
importcom..mapapi.MapActivity;
importcom..mapapi.MapController;
importcom..mapapi.MapView;
importcom..mapapi.Overlay;
importcom..mapapi.Projection;
{
privateContextmContext;
privateMapViewmapView;
@Override
(){
//TODOAuto-generatedmethodstub
returnfalse;
}
privateGeoPointgpoint1,gpoint2,gpoint3;//連線的點
@Override
protectedvoidonCreate(Bundlearg0){
super.onCreate(arg0);
setContentView(R.layout.map_layout);
BaseApplicationbaseApp=(BaseApplication)this.getApplication();
if(baseApp.mBMapManage==null){
baseApp.mBMapManage=newBMapManager(mContext);
baseApp.mBMapManage.init(baseApp.mStrKey,
newBaseApplication.MyGeneralListener());
}
baseApp.mBMapManage.start();
super.initMapActivity(baseApp.mBMapManage);//初始化mapsdk
mapView=(MapView)findViewById(R.id.bmapView);
mapView.setBuiltInZoomControls(true);
//設置在縮放動畫過程中也顯示overlay,默認為不繪制
mapView.setDrawOverlayWhenZooming(true);
//RouteLinerouteLine=
//(RouteLine)getIntent().getSerializableExtra("routeLine");
//這里畫點和連接線
MyOverlaymyOverlay=newMyOverlay();
mapView.getOverlays().add(myOverlay);
MapControllermapController=mapView.getController();
mapController.zoomIn();
gpoint1=newGeoPoint((int)(2259316*10),
(int)(11396279*10));
gpoint2=newGeoPoint((int)(2259245*10),
(int)(11396226*10));
gpoint3=newGeoPoint((int)(2259121*10),
(int)(11396066*10));
mapController.animateTo(gpoint1);//設置一個起點
}
classMyOverlayextendsOverlay{
@Override
publicvoiddraw(Canvascanvas,MapViewmapView,booleanshadow){
super.draw(canvas,mapView,shadow);
Projectionprojection=mapView.getProjection();
Pointp1=newPoint();
Pointp2=newPoint();
Pointp3=newPoint();
//經度轉像素
projection.toPixels(gpoint1,p1);
projection.toPixels(gpoint2,p2);
projection.toPixels(gpoint3,p3);
//第一個畫筆畫圓
PaintfillPaint=newPaint();
fillPaint.setColor(Color.BLUE);
fillPaint.setAntiAlias(true);
fillPaint.setStyle(Style.FILL);
//將圖畫到上層
canvas.drawCircle(p1.x,p1.y,5.0f,fillPaint);
canvas.drawCircle(p2.x,p2.y,5.0f,fillPaint);
canvas.drawCircle(p3.x,p3.y,5.0f,fillPaint);
//第二個畫筆畫線
Paintpaint=newPaint();
paint.setColor(Color.BLUE);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(4);
//連接
Pathpath=newPath();
path.moveTo(p1.x,p1.y);
path.lineTo(p2.x,p2.y);
path.lineTo(p3.x,p3.y);
//畫出路徑
canvas.drawPath(path,paint);
}
}
}
Ⅳ 有誰知道android里的Path類中的quadTo()方法是怎麼實現貝塞爾曲線的嗎
/**
* 畫曲線(核心代碼)
*
* @param startp
* 開始點
* @param endp
* 結束點
* @param canvas
* 畫布
* @param paint
* 畫筆
*/
private void drawCurve(Point[] points, Canvas canvas, Paint paint)
{
Point startp = new Point();
Point endp = new Point();
for (int i = 0; i < points.length - 1; i++)
{
startp = points[i];
endp = points[i + 1];
int wt = (startp.x + endp.x) / 2;
Point p3 = new Point();
Point p4 = new Point();
p3.y = startp.y;
p3.x = wt;
p4.y = endp.y;
p4.x = wt;
// 確定曲線的路徑
path = new Path();
path.moveTo(startp.x, startp.y);
path.cubicTo(p3.x, p3.y, p4.x, p4.y, endp.x, endp.y);
canvas.drawPath(path, paint);
}
}
Ⅵ android 怎麼手動繪制幾何圖形源碼
可以參考下面的代碼
package cn.m15.xys;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
public class Geometry extends Activity {
public int mScreenWidth = 0;
public int mScreenHeight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(new GeometryView(this));
super.onCreate(savedInstanceState);
}
class GeometryView extends View {
Paint mPaint = null;
public GeometryView(Context context) {
super(context);
mPaint = new Paint();
mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//設置畫布顏色 也就是背景顏色
canvas.drawColor(Color.WHITE);
mPaint.setColor(Color.BLACK);
canvas.drawText("繪制無規則幾何圖形喔!!!", 150, 30, mPaint);
//繪制一條線
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(4);
canvas.drawLine(0, 0, 100, 100, mPaint);
//繪制一個矩形
mPaint.setColor(Color.YELLOW);
canvas.drawRect(0, 120, 100, 200, mPaint);
//繪制一個圓形
mPaint.setColor(Color.BLUE);
canvas.drawCircle(80, 300, 50, mPaint);
//繪制一個橢圓
mPaint.setColor(Color.CYAN);
canvas.drawOval(new RectF(300,370,120,100), mPaint);
//繪制多邊形
mPaint.setColor(Color.BLACK);
Path path = new Path();
path.moveTo(150+5 , 400 -50);
path.lineTo(150+45, 400 - 50);
path.lineTo(150+30, 460 - 50);
path.lineTo(150+20, 460 - 50);
path.close();
canvas.drawPath(path, mPaint);
}
}
}
Ⅶ android中用path畫了一個矩形可否再通過這個path畫一個比他小的矩形!相當於縮小
下面是Canvas類常用的方法:
drawRect(RectF rect, Paint paint) //繪制區域,參數一為RectF一個區域
drawPath(Path path, Paint paint) //繪制一個路徑,參數一為Path路徑對象
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //貼圖,參數一就是我們常規的Bitmap對象,參數二是源區域(這里是bitmap),參數三是目標區域(應該在canvas的位置和大小),參數四是Paint畫刷對象,因為用到了縮放和拉伸的可能,當原始Rect不等於目標Rect時性能將會有大幅損失。
drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //畫線,參數一起始點的x軸位置,參數二起始點的y軸位置,參數三終點的x軸水平位置,參數四y軸垂直位置,最後一個參數為Paint 畫刷對象。
drawPoint(float x, float y, Paint paint) //畫點,參數一水平x軸,參數二垂直y軸,第三個參數為Paint對象。
drawText(String text, float x, floaty, Paint paint) //渲染文本,Canvas類除了上面的還可以描繪文字,參數一是String類型的文本,參數二x軸,參數三y軸,參數四是Paint對象。
drawOval(RectF oval, Paint paint)//畫橢圓,參數一是掃描區域,參數二為paint對象;
drawCircle(float cx, float cy, float radius,Paint paint)// 繪制圓,參數一是中心點的x軸,參數二是中心點的y軸,參數三是半徑,參數四是paint對象;
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//畫弧,
參數一是RectF對象,一個矩形區域橢圓形的界限用於定義在形狀、大小、電弧,參數二是起始角(度)在電弧的開始,
參數三掃描角(度)開始順時針測量的,參數四是如果這是真的話,包括橢圓中心的電弧,並關閉它,如果它是假這將是一個弧線,參數五是Paint對象;
還要理解一個paint類:
Class Overview
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
paint類擁有風格和顏色信息如何繪制幾何學,文本和點陣圖。
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) // 設置下劃線
Ⅷ Android中Path類的lineTo方法和quadTo方法畫線的區別
1. Path--->quadTo(float x1, float y1, float x2, float y2):
該方法的實現是當我們不僅僅是畫一條線甚至是畫弧線時會形成平滑的曲線,該曲線又稱為"貝塞爾曲線"(Bezier curve),其中,x1,y1為控制點的坐標值,x2,y2為終點的坐標值;
貝塞爾曲線的形成,就比如我們把一條橡皮筋拉直,橡皮筋的頭尾部對應起點和終點,然後從拉直的橡皮筋中選擇任意一點(除頭尾對應的點外)扯動橡皮筋形成的彎曲形狀,而那個扯動橡皮筋的點就是控制點;
2. Path--->lineTo(float x, float y) :
該方法實現的僅僅是兩點連成一線的繪制線路,這樣,當我們用這個方法繪制曲線時,缺陷就出來了;下面的例子,同樣還是和上面的Demo差不多,只不過Path調用的是lineTo方法,