Android 加載圖片并在上面畫圖總結(jié)

android 加載圖片并在上面畫圖

像Ps上的應(yīng)用一樣泪幌,我們加載一個(gè)圖片然后在上面增加各種我們需要的掛件敲霍,文字效果等。我們今天完成一個(gè)簡(jiǎn)單的Demo

復(fù)制代碼

復(fù)制代碼

package com.example.fingerdraw;

import java.io.FileNotFoundException;

import java.io.OutputStream;

import android.app.Activity;

import android.content.ContentValues;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Bitmap.CompressFormat;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.net.Uri;

import android.os.Bundle;

import android.provider.MediaStore.Images.Media;

import android.view.Display;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends Activity implements OnTouchListener,

OnClickListener {

private ImageView image;

private Paint paint;

private Canvas canvas;

private Bitmap bitmap;

private Bitmap alterBitmap;

private Button choose;

private Button save;

private final static int RESULT = 0;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

image = (ImageView) findViewById(R.id.image);

choose = (Button) findViewById(R.id.chooseButton);

save=(Button)findViewById(R.id.saveButton);

/*

* bitmap = Bitmap.createBitmap(getWindowManager().getDefaultDisplay()

* .getWidth(), getWindowManager().getDefaultDisplay().getHeight(),

* Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap);// 畫板?

*paint = new Paint();// 畫刷 paint.setColor(Color.BLUE);

* image.setImageBitmap(bitmap);

*/

image.setOnTouchListener(this);

choose.setOnClickListener(this);

save.setOnClickListener(this);

}

private float downx = 0;

private float downy = 0;

private float upx = 0;

private float upy = 0;

public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_DOWN:

downx = event.getX();

downy = event.getY();

break;

case MotionEvent.ACTION_MOVE:

// 路徑畫板

upx = event.getX();

upy = event.getY();

canvas.drawLine(downx, downy, upx, upy, paint);

image.invalidate();

downx = upx;

downy = upy;

break;

case MotionEvent.ACTION_UP:

// 直線畫板

upx = event.getX();

upy = event.getY();

canvas.drawLine(downx, downy, upx, upy, paint);

image.invalidate();// 刷新

break;

default:

break;

}

return true;

}

public void onClick(View arg0) {

if(arg0==choose){

Intent intent = new Intent(Intent.ACTION_PICK,

android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(intent, RESULT);

}else if(arg0==save){

//保存畫好的圖片

if(alterBitmap!=null){

try {

Uri imageUri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());

OutputStream outputStream=getContentResolver().openOutputStream(imageUri);

alterBitmap.compress(CompressFormat.PNG, 90, outputStream);

Toast.makeText(getApplicationContext(), "save!", Toast.LENGTH_SHORT).show();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// TODO Auto-generated method stub

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {

Uri imageFileUri = data.getData();

Display display = getWindowManager().getDefaultDisplay();

float dw = display.getWidth();

float dh = display.getHeight();

try {

BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

bitmap = BitmapFactory.decodeStream(getContentResolver()

.openInputStream(imageFileUri), null, options);

int heightRatio = (int) Math.ceil(options.outHeight / dh);

int widthRatio = (int) Math.ceil(options.outWidth / dw);

if (heightRatio > 1 && widthRatio > 1) {

if (heightRatio > widthRatio) {

options.inSampleSize = heightRatio;

} else {

options.inSampleSize = widthRatio;

}

}

options.inJustDecodeBounds = false;

bitmap = BitmapFactory.decodeStream(getContentResolver()

.openInputStream(imageFileUri), null, options);

alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),

bitmap.getHeight(), bitmap.getConfig());

canvas = new Canvas(alterBitmap);

paint = new Paint();

paint.setColor(Color.GREEN);

paint.setStrokeWidth(10);

Matrix matrix = new Matrix();

canvas.drawBitmap(bitmap, matrix, paint);

image.setImageBitmap(alterBitmap);

image.setOnTouchListener(this);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞬女,更是在濱河造成了極大的恐慌,老刑警劉巖努潘,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诽偷,死亡現(xiàn)場(chǎng)離奇詭異坤学,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)报慕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門深浮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人眠冈,你說我怎么就攤上這事略号。” “怎么了洋闽?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵玄柠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我诫舅,道長(zhǎng)羽利,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任刊懈,我火速辦了婚禮这弧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虚汛。我一直安慰自己匾浪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布卷哩。 她就那樣靜靜地躺著蛋辈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪将谊。 梳的紋絲不亂的頭發(fā)上冷溶,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音尊浓,去河邊找鬼逞频。 笑死,一個(gè)胖子當(dāng)著我的面吹牛栋齿,可吹牛的內(nèi)容都是我干的苗胀。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼瓦堵,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼基协!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谷丸,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤堡掏,失蹤者是張志新(化名)和其女友劉穎应结,沒想到半個(gè)月后刨疼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泉唁,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年揩慕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亭畜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迎卤,死狀恐怖拴鸵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜗搔,我是刑警寧澤劲藐,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站樟凄,受9級(jí)特大地震影響聘芜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缝龄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一汰现、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叔壤,春花似錦瞎饲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俺亮,卻和暖如春仗哨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铅辞。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工厌漂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斟珊。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓苇倡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親囤踩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旨椒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,444評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,310評(píng)論 25 707
  • 1: 獲取控件寬高 控件View有g(shù)etHeight()和getwidth()方法可以獲取寬高堵漱,但是如果直接在on...
    自由人是工程師閱讀 1,792評(píng)論 0 0
  • A和B是2個(gè)類综慎,B下有個(gè)公有屬性為A的外鍵,如何查詢與A相關(guān)的所有B對(duì)象勤庐。 方法:先實(shí)例化一個(gè)A的對(duì)象a示惊,然后b=...
    leomei91閱讀 168評(píng)論 0 0
  • 0913 我細(xì)細(xì)品味著自己的孤獨(dú)好港,開始的階段只是哭,過了不知幾個(gè)月米罚,渾身沒有力氣沒有食欲也沒有眼淚钧汹,就這么懶懶的讓...
    MissR1960閱讀 293評(píng)論 0 1