?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ì)您有幫助就好】元

