日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Bitmap 相關(guān)2:Bitmap.createBitmap() 使用

系統(tǒng) 2976 0
寫道

?Bitmap 創(chuàng)建

?

寫道
我們不能總是依賴于BitmapFactory 下面告訴大家怎么從Bitmaqp中截取某一部分創(chuàng)建新的Bitmap

系統(tǒng)會有一個默認(rèn)png圖片:icon.png 但是這個圖片中最外層會有白色的 比較討厭 現(xiàn)在以此為例 說說怎么截取 因?yàn)槠渫鈱訛榘咨?顯示不出來 所以我用了 *.9.png 作為其邊界

? Bitmap 相關(guān)2:Bitmap.createBitmap() 使用

?

?

[代碼 步驟]

1. 創(chuàng)建Bitmaop 且指向icon.png

    Bitmap ori = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
  

?

?

2. 創(chuàng)建布局文件 有2個ImageView 一個供原圖顯示 一個供切割后顯示

    <?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. 如何選取圖片位置

寫道
函數(shù)原型: Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)


方法1:不斷調(diào)整參數(shù):x,y,width,heighy

方法2:利用導(dǎo)航鍵 上下左右分別控制上述4變量


導(dǎo)航鍵 左: x
導(dǎo)航鍵 右: width
導(dǎo)航鍵 上: y
導(dǎo)航鍵 下: height

使之向圖片中央靠攏 且按下一下 移動固定的距離

?

    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.? 還需要判斷移動是否合理

    以下幾種情況不合理:

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. 具體移動方法:

    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)行情況:?

? Bitmap 相關(guān)2:Bitmap.createBitmap() 使用

Bitmap 相關(guān)2:Bitmap.createBitmap() 使用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 镶黄旗| 厦门市| 白山市| 龙江县| 长沙市| 剑河县| 海伦市| 罗源县| 津南区| 瑞丽市| 吉木萨尔县| 文山县| 玛纳斯县| 福泉市| 溧阳市| 班戈县| 高青县| 平和县| 东城区| 武鸣县| 宁城县| 济宁市| 洪泽县| 安乡县| 新闻| 阳东县| 嘉峪关市| 余干县| 广宁县| 宁强县| 太仓市| 兴隆县| 民乐县| 同心县| 轮台县| 花莲市| 洛阳市| 舞钢市| 太白县| 政和县| 三穗县|