Android實(shí)現(xiàn)簡(jiǎn)單畫圖畫板
本文實(shí)例為大家分享了Android實(shí)現(xiàn)簡(jiǎn)單畫圖畫板的具體代碼,供大家參考,具體內(nèi)容如下
效果如圖:

布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="600px"
android:layout_height="900px"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="red"
android:text="紅色" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="green"
android:text="綠色"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="brush"
android:text="刷子"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="eraser"
android:text="橡皮擦"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="save"
android:text="保存" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cancel"
android:text="取消" />
</LinearLayout>
</RelativeLayout>
MainActivity.java
package com.example.yulongji.android10;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
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.os.Environment;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
private ImageView iv;
//原圖
private Bitmap bitsrc;
//拷貝圖
private Bitmap bitcopy;
private Canvas canvas;
private Paint paint;
private int startX;
private int startY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
setBitmap();
// 設(shè)置觸摸偵聽
iv.setOnTouchListener(new View.OnTouchListener() {
// 觸摸屏幕時(shí),觸摸事件產(chǎn)生時(shí),此方法調(diào)用
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
// 用戶手指摸到屏幕
case MotionEvent.ACTION_DOWN:
startX = (int) event.getX();
startY = (int) event.getY();
break;
// 用戶手指正在滑動(dòng)
case MotionEvent.ACTION_MOVE:
int x = (int) event.getX();
int y = (int) event.getY();
canvas.drawLine(startX, startY, x, y, paint);
// 每次繪制完畢之后,本次繪制的結(jié)束坐標(biāo)變成下一次繪制的初始坐標(biāo)
startX = x;
startY = y;
iv.setImageBitmap(bitcopy);
break;
// 用戶手指離開屏幕
case MotionEvent.ACTION_UP:
break;
}
// true:告訴系統(tǒng),這個(gè)觸摸事件由我來(lái)處理
// false:告訴系統(tǒng),這個(gè)觸摸事件我不處理,這時(shí)系統(tǒng)會(huì)把觸摸事件傳遞給imageview的父節(jié)點(diǎn)
return true;
}
});
}
public void setBitmap() {
// 加載畫畫板的背景圖
bitsrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
// 創(chuàng)建圖片副本
// 1.在內(nèi)存中創(chuàng)建一個(gè)與原圖一模一樣大小的bitmap對(duì)象,創(chuàng)建與原圖大小一致的白紙
bitcopy = Bitmap.createBitmap(bitsrc.getWidth(), bitsrc.getHeight(),
bitsrc.getConfig());
// 2.創(chuàng)建畫筆對(duì)象
paint = new Paint();
// 3.創(chuàng)建畫板對(duì)象,把白紙鋪在畫板上
canvas = new Canvas(bitcopy);
// 4.開始作畫,把原圖的內(nèi)容繪制在白紙上
canvas.drawBitmap(bitsrc, new Matrix(), paint);
// 5.將繪制的圖放入imageview中
iv.setImageBitmap(bitcopy);
}
public void red(View view){
paint.setColor(Color.RED);
}
public void green(View view){
paint.setColor(Color.GREEN);
}
public void brush(View view){
paint.setStrokeWidth(8);
}
public void cancel(View view){
setBitmap();
}
public void eraser(View view){
paint.setColor(Color.rgb(243,243,243));
paint.setStrokeWidth(30);
}
public void save(View view){
String path = Environment.getExternalStorageDirectory() + "/" + "2.png";
File file = new File(path);
try {
FileOutputStream fos = new FileOutputStream(file);
bitcopy.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 發(fā)送sd卡就緒廣播
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開發(fā)筆記之Intent初級(jí)學(xué)習(xí)教程
這篇文章主要介紹了Android開發(fā)筆記之Intent初級(jí)學(xué)習(xí),較為詳細(xì)的分析了Android Intent項(xiàng)目的建立,功能實(shí)現(xiàn)及Intent使用技巧,需要的朋友可以參考下2016-02-02
Android實(shí)現(xiàn)按鈕點(diǎn)擊效果
本文主要介紹了Android實(shí)現(xiàn)按鈕點(diǎn)擊效果:第一次點(diǎn)擊變色,第二次恢復(fù)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
Android App中自定義View視圖的實(shí)例教程
這篇文章主要介紹了Android App中自定義View視圖的實(shí)例教程,詳細(xì)講解了如何在創(chuàng)建View中定義各種鎖需要的樣式屬性,需要的朋友可以參考下2016-04-04
Android頁(yè)面中可編輯與不可編輯切換的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于在Android頁(yè)面中可編輯與不可編輯切換的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Android 嵌套Fragment的使用實(shí)例代碼
本文主要介紹Android Fragment,在這里提供了實(shí)例代碼跟效果圖,希望能幫助有需要的小伙伴2016-07-07
分享Android中ExpandableListView控件使用教程
這篇文章主要介紹了Android中ExpandableListView控件使用教程,可以實(shí)現(xiàn)二級(jí)列表展示效果,需要的朋友可以參考下2015-12-12
Android學(xué)習(xí)筆記(二)App工程文件分析
之前寫過(guò)一篇關(guān)于安卓環(huán)境配置以及第一個(gè)app的制作過(guò)程,下面我們來(lái)進(jìn)一步,分析下APP工程文件2014-07-07
Android手機(jī)內(nèi)存中文件的讀寫方法小結(jié)
這篇文章主要介紹了Android手機(jī)內(nèi)存中文件的讀寫方法,實(shí)例總結(jié)了Android針對(duì)文件讀寫操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04

