編輯:關於Android編程
android上想實現局部放大的效果,比如畫面中加個放大鏡的效果
發現ShapeDrawable是一個最好的選擇。
首先,ShapeDrawable構造的時候可以指定描畫的形狀,
其次,可以通過shape.getPaint().setShader();指定Shader,shader可以接受一個圖片和matrix
所以問題就順利的解決了:)
具體實現如下:
[java]
float scale = 1.2f;
int cx = 224;
int cy = 357;
int r = 200;
// 指定形狀創建一個ShapeDrawable
ShapeDrawable shape=new ShapeDrawable(new OvalShape());
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.bg1);
BitmapShader bs = new BitmapShader(bm, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Matrix m = new Matrix();
m.setTranslate(r-cx, r-cy);
m.postScale(scale, scale);
bs.setLocalMatrix(m); // 圖形變換可以在這裡實現,包括區域指定
// 為ShapeDrawable設置Shader
shape.getPaint().setShader(bs);
// 指定描畫目標位置
shape.setBounds((int)(cx-r*scale),(int)(cy-r*scale),(int)(cx+r*scale),(int)(cy+r*scale));
canvas.drawBitmap(bm, 0, 0, null);
shape.draw(canvas);
float scale = 1.2f;
int cx = 224;
int cy = 357;
int r = 200;
// 指定形狀創建一個ShapeDrawable
ShapeDrawable shape=new ShapeDrawable(new OvalShape());
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.bg1);
BitmapShader bs = new BitmapShader(bm, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Matrix m = new Matrix();
m.setTranslate(r-cx, r-cy);
m.postScale(scale, scale);
bs.setLocalMatrix(m); // 圖形變換可以在這裡實現,包括區域指定
// 為ShapeDrawable設置Shader
shape.getPaint().setShader(bs);
// 指定描畫目標位置
shape.setBounds((int)(cx-r*scale),(int)(cy-r*scale),(int)(cx+r*scale),(int)(cy+r*scale));
canvas.drawBitmap(bm, 0, 0, null);
shape.draw(canvas);
引言最近在研究Android的變形,Android的2D變形(包括縮放,扭曲,平移,旋轉等)可以通過Matrix來實現,3D變形可以通過Camera來實現。接下來就將我這
封面圖: 簡介 波尼音樂是一款開源Android在線音樂播放器。 播放本地音樂與在線音樂 在線音樂排行榜,如熱歌榜、新歌榜等 高仿雲音樂的黑膠唱片專輯封
一、簡介這個題目是別人面試UC優視集團Android逆向工程師一職位的面試題,相比較前面的面試題1,增加了一些難度。 二、題目分析1.使
多線程下載是加快下載速度的一種方式,通過開啟多個線程去執行一個任務..可以使任務的執行速度變快..多線程的任務下載時常都會使用得到..比如說我們手機內部應用寶的下載機制.