亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Bitmap 相關2:Bitmap.createBitmap() 使用

系統 3012 0
寫道

?Bitmap 創建

?

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

系統會有一個默認png圖片:icon.png 但是這個圖片中最外層會有白色的 比較討厭 現在以此為例 說說怎么截取 因為其外層為白色 顯示不出來 所以我用了 *.9.png 作為其邊界

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

?

?

[代碼 步驟]

1. 創建Bitmaop 且指向icon.png

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

?

?

2. 創建布局文件 有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.? 定義變量 標志切割位置 并初始化之

    int startX,startY,lengthX,lengthY;
  

?

    startX = 0;
startY = 0;

lengthX = width;
lengthY = height;
  

?

?

?6. 如何選取圖片位置

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


方法1:不斷調整參數:x,y,width,heighy

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


導航鍵 左: x
導航鍵 右: width
導航鍵 上: y
導航鍵 下: 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. 當圖形左邊 比 圖形最大寬度 還大
2. 當圖形上邊 比 圖形最大高度 還大
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 運行情況:?

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

Bitmap 相關2:Bitmap.createBitmap() 使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲精品网站 | 亚洲一区成人 | 国内在线观看 | 国内精品久久久久影院不卡 | 国产一区二区三区久久精品小说 | 欧美成人亚洲高清在线观看 | 中国女人69xxxxx | 日产精品久久久一区二区 | 欧美成一级 | 2018一级毛片免费观看 | 国产一区在线播放 | 99热在线观看精品 | 桃花在线视频社区 | 亚洲成年人免费网站 | 美女天天操 | 中文字幕欧美日韩va免费视频 | 国产在线观看一区二区三区四区 | 一级毛片免费看 | 特级生活片| 国产一级毛片网站 | 波多野结衣乳巨码无在线观看 | 日韩成人免费一级毛片 | 日本一本一道久久香蕉免费 | 中文字幕久久精品波多野结 | 久久久伊香蕉网站 | 天天狠天天操 | 亚洲精品乱码久久久久久蜜桃欧美 | 亚洲精品一区二区中文 | 欧美夜夜骑 | 四虎免费大片aⅴ入口 | 久久婷婷色综合老司机 | 日韩欧美国产卡通动漫 | 欧美成人毛片 | 国产高清精品一级毛片 | 伊人情人综合成人久久网小说 | 在线成人a毛片免费播放 | 天天干天天爽 | 国产成人免费 | 六月丁香色婷婷 | 欧美性一区二区三区 | 最近中文日本字幕免费完整 |