天天看點

app中頭像,圓形圖檔

今天寫項目的時候,遇到了這個東西,寫完了,就在記錄一份,其實不難。

下面是真相:

app中頭像,圓形圖檔

其實關鍵代碼就一個方法:

/**
     * 圓形的圖檔
     */
    private void roundPic() {
    	//這一張圖是要進行圓形的圖檔
    	bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.dsafsdafas);
    	//這一張是一張圓形的透明圖檔,也是一張魔闆吧
        Bitmap backBp = BitmapFactory.decodeResource(getResources(),R.drawable.userbg);
        //擷取模闆圖檔的寬。高。規格、布局,畫布
        alterBitmap = Bitmap.createBitmap(backBp.getWidth(),backBp.getHeight(), backBp.getConfig());
        //畫一張這樣的畫布
        Canvas canvas = new Canvas(alterBitmap);
        //畫筆
        Paint paint = new Paint();
        //抗鋸齒
        paint.setAntiAlias(true);
        //畫一張bitmap,新的矩陣。規格
        canvas.drawBitmap(backBp, new Matrix(), paint);
        //這一步是關鍵,設定兩張圖檔相交時的處理
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        bitmap = Bitmap.createScaledBitmap(bitmap, backBp.getWidth(),backBp.getHeight(), true);
        //産生新圖,畫好
        canvas.drawBitmap(bitmap, new Matrix(), paint);
        //設定圖檔
         im.setImageBitmap(alterBitmap);
    }
           

當然,我這裡隻是做了一個小的Dome,真正的項目中應該是在自己相冊或者調用系統的相機照相,得到的圖檔,然後上傳到網上,顯示到界面上,這樣一個過程,就要去封裝了。不過上邊的方法我做了大量的注釋,核心的方法就是這裡。下面我把整個代碼貼一下:

package com.example.sdfasdfadfada;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private ImageView im;
	private Bitmap alterBitmap,bitmap;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		im=(ImageView) findViewById(R.id.id_im);
		
		roundPic();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	  /**
     * 圓形的圖檔
     */
    private void roundPic() {
    	//這一張圖是要進行圓形的圖檔
    	bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.dsafsdafas);
    	//這一張是一張圓形的透明圖檔,也是一張魔闆吧
        Bitmap backBp = BitmapFactory.decodeResource(getResources(),R.drawable.userbg);
        //擷取模闆圖檔的寬。高。規格、布局,畫布
        alterBitmap = Bitmap.createBitmap(backBp.getWidth(),backBp.getHeight(), backBp.getConfig());
        //畫一張這樣的畫布
        Canvas canvas = new Canvas(alterBitmap);
        //畫筆
        Paint paint = new Paint();
        //抗鋸齒
        paint.setAntiAlias(true);
        //畫一張bitmap,新的矩陣。規格
        canvas.drawBitmap(backBp, new Matrix(), paint);
        //這一步是關鍵,設定兩張圖檔相交時的處理
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        bitmap = Bitmap.createScaledBitmap(bitmap, backBp.getWidth(),backBp.getHeight(), true);
        //産生新圖,畫好
        canvas.drawBitmap(bitmap, new Matrix(), paint);
        //設定圖檔
         im.setImageBitmap(alterBitmap);
    }
}
           

注:如果上邊的代碼功能不能實作的話,可以下載下傳Dome......

http://download.csdn.net/detail/jiajia1112223/9452874

繼續閱讀