Android開發(fā)實(shí)現(xiàn)圖片平移、縮放、倒影及旋轉(zhuǎn)功能的方法
本文實(shí)例講述了Android開發(fā)實(shí)現(xiàn)圖片平移、縮放、倒影及旋轉(zhuǎn)功能的方法。分享給大家供大家參考,具體如下:
解析:
1)根據(jù)原來的圖片創(chuàng)建新的圖片
Bitmap modBm = Bitmap.createBitmap(bm.getWidth()+20, bm.getHeight()+20, bm.getConfig());
2)設(shè)置到畫布
Canvas canvas = new Canvas(modBm);
3)使用矩陣進(jìn)行平移…
Matrix matrix = new Matrix(); matrix.setRotate(90, bm.getWidth()/2, bm.getHeight()/2);
4)把改變后圖片設(shè)置到
canvas.drawBitmap(bm, matrix, paint); imageView2.setImageBitmap(modBm);
示例代碼:
1、平移:
public class TranslateImageActivity extends Activity {
private ImageView imageView1;
private ImageView imageView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_rotate);
initViews();
}
private void initViews() {
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.mm0);
imageView1.setImageBitmap(bm);
Bitmap modBm = Bitmap.createBitmap(bm.getWidth()+20, bm.getHeight()+20, bm.getConfig());
Canvas canvas = new Canvas(modBm);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
Matrix matrix = new Matrix();
//matrix.setRotate(90, bm.getWidth()/2, bm.getHeight()/2);
matrix.setTranslate(20, 20);
matrix.postTranslate(20, 20);
canvas.drawBitmap(bm, matrix, paint);
imageView2.setImageBitmap(modBm);
}
}
2、縮放
public class ScaleImageActivity extends BaseActivity {
private static final int DOUBLE = 2;
private ImageView iv1, iv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scale_iamge);
iv1 = (ImageView) findViewById(R.id.imageView1);
iv2 = (ImageView) findViewById(R.id.imageView2);
Bitmap b1 = BitmapFactory.decodeResource(getResources(), R.drawable.p1);
iv1.setImageBitmap(b1);
Bitmap b2 = Bitmap.createBitmap(b1.getWidth()*DOUBLE, b1.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(b2);
Matrix matrix = new Matrix();
matrix.setValues(new float[]{
DOUBLE * 1.0f, 0, 0,//x
0, 1.0f, 0,//y
0, 0, 1.0f//z
});
canvas.drawBitmap(b1, matrix, new Paint());
iv2.setImageBitmap(b2);
}
}
3、倒影
public class ShadeImageActivity extends Activity {
private ImageView imageView1;
private ImageView imageView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_rotate);
initViews();
}
private void initViews() {
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.mm3);
imageView1.setImageBitmap(bm);
Bitmap modBm = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
Canvas canvas = new Canvas(modBm);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
Matrix matrix = new Matrix();
//matrix.setRotate(90, bm.getWidth()/2, bm.getHeight()/2);
//matrix.setTranslate(20, 20);
//鏡子效果
matrix.setScale(1, -1);
matrix.postTranslate(0, bm.getHeight());
canvas.drawBitmap(bm, matrix, paint);
imageView2.setImageBitmap(modBm);
}
}
4、旋轉(zhuǎn)
public class RotateImageActivity extends Activity {
private ImageView imageView1;
private ImageView imageView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_rotate);
initViews();
}
private void initViews() {
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.mm0);
imageView1.setImageBitmap(bm);
Bitmap modBm = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
Canvas canvas = new Canvas(modBm);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
Matrix matrix = new Matrix();
matrix.setRotate(90, bm.getWidth()/2, bm.getHeight()/2);
canvas.drawBitmap(bm, matrix, paint);
imageView2.setImageBitmap(modBm);
}
}
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android 實(shí)現(xiàn)代碼混淆的實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)代碼混淆的實(shí)例的相關(guān)資料,希望通過本文大家能夠掌握Android代碼混淆的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09
使用Android studio編寫一個(gè)小的jni程序
JNI是Java Native Interface的縮寫,它提供了若干的API實(shí)現(xiàn)了Java和其他語言的通信(主要是C&C++)。這篇文章給大家介紹了基于Android studio寫一個(gè)小的jni程序的方法,一起看看吧2018-03-03
Android批量插入數(shù)據(jù)到SQLite數(shù)據(jù)庫的方法
這篇文章主要為大家詳細(xì)介紹了Android批量插入數(shù)據(jù)到SQLite數(shù)據(jù)庫的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android啟動頁用戶相關(guān)政策彈框的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android啟動頁用戶相關(guān)政策彈框的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Android動畫之逐幀動畫(Frame Animation)實(shí)例詳解
這篇文章主要介紹了Android動畫之逐幀動畫(Frame Animation),結(jié)合實(shí)例形式較為詳細(xì)的分析了逐幀動畫的原理,注意事項(xiàng)與相關(guān)使用技巧,需要的朋友可以參考下2016-01-01
Android 中Fragment與Activity通訊的詳解
這篇文章主要介紹了Android 中Fragment與Activity通訊的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握如何通信的,需要的朋友可以參考下2017-10-10

