?Bitmap 創(chuàng)建
?
系統(tǒng)會(huì)有一個(gè)默認(rèn)png圖片:icon.png 但是這個(gè)圖片中最外層會(huì)有白色的 比較討厭 現(xiàn)在以此為例 說(shuō)說(shuō)怎么截取 因?yàn)槠渫鈱訛榘咨?顯示不出來(lái) 所以我用了 *.9.png 作為其邊界
?
?
[代碼 步驟]
1. 創(chuàng)建Bitmaop 且指向icon.png
Bitmap ori = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
?
?
2. 創(chuàng)建布局文件 有2個(gè)ImageView 一個(gè)供原圖顯示 一個(gè)供切割后顯示
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/layout" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image1" android:layout_gravity="center_horizontal" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image2" android:layout_gravity="center" /> </LinearLayout>
?
?
3. 初始化變量
lLauout = (LinearLayout)findViewById(R.id.layout); iv1 = (ImageView)findViewById(R.id.image1); iv2 = (ImageView)findViewById(R.id.image2);
?
4. 得到原圖的寬度與高度 供后面使用
width = ori.getWidth(); height = ori.getHeight();
?
5.? 定義變量 標(biāo)志切割位置 并初始化之
int startX,startY,lengthX,lengthY;
?
startX = 0; startY = 0; lengthX = width; lengthY = height;
?
?
?6. 如何選取圖片位置
方法1:不斷調(diào)整參數(shù):x,y,width,heighy
方法2:利用導(dǎo)航鍵 上下左右分別控制上述4變量
導(dǎo)航鍵 左: x
導(dǎo)航鍵 右: width
導(dǎo)航鍵 上: y
導(dǎo)航鍵 下: height
使之向圖片中央靠攏 且按下一下 移動(dòng)固定的距離
?
public boolean onKeyDown(int keyCode, KeyEvent msg){ switch(keyCode){ case KeyEvent.KEYCODE_DPAD_LEFT: updateLeft(); break; case KeyEvent.KEYCODE_DPAD_RIGHT: updateRight(); break; case KeyEvent.KEYCODE_DPAD_UP: updateUp(); break; case KeyEvent.KEYCODE_DPAD_DOWN: updateDown(); break; case KeyEvent.KEYCODE_DPAD_CENTER: showResult(); break; } return false; }
?
?
7.? 還需要判斷移動(dòng)是否合理
以下幾種情況不合理: 1. 當(dāng)圖形左邊 比 圖形最大寬度 還大 2. 當(dāng)圖形上邊 比 圖形最大高度 還大 3. 圖形寬度 或 高度 小于 0
?
public boolean isUpdateOK(){ if((startX > lengthX)||(startY > lengthY)||(lengthX > 0)||(lengthY > 0)){ return false; } else { return true; } }
?
?
8. 具體移動(dòng)方法:
public void updateLeft(){ startX += step; lengthX = width-startX; lengthY = height-startY; if(isUpdateOK()){ target1.recycle(); target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY); iv2.setImageBitmap(target1); setContentView(lLauout); } } public void updateUp(){ startY += step; lengthX = width-startX; lengthY = height-startY; if(isUpdateOK()){ target1.recycle(); target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY); iv2.setImageBitmap(target1); setContentView(lLauout); } } public void updateRight(){ lengthX -= step; if(isUpdateOK()){ target1.recycle(); target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY); iv2.setImageBitmap(target1); setContentView(lLauout); } } public void updateDown(){ lengthY -= step; if(isUpdateOK()){ target1.recycle(); target1 = Bitmap.createBitmap(ori,startX, startY, lengthX, lengthY); iv2.setImageBitmap(target1); setContentView(lLauout); } } public void showResult(){ AlertDialog.Builder ab = new AlertDialog.Builder(this); AlertDialog aDialog; ab.setMessage("startX:"+startX+"\n"+"startY:"+startY+"\n"+"lengthX:"+lengthX+"\n"+"lengthY:"+lengthY).setTitle("show result").show();; aDialog = ab.create(); aDialog.show(); }
?
?
?
9.?emulator 運(yùn)行情況:?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
