Android實現(xiàn)畫畫板案例
本文實例為大家分享了Android實現(xiàn)畫畫板的具體代碼,供大家參考,具體內(nèi)容如下
① 準備一個布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.it.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:text="修改顏色"
android:onClick="color"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:text="粗細+1"
android:onClick="size"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:text="保存圖片"
android:onClick="save"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:id="@+id/iv_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
② 核心代碼
package com.example.it;
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.Environment;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
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 AppCompatActivity {
private final String TAG = getClass().getSimpleName();
private ImageView iv_show;
private Bitmap copyBm;
private float x;
private float y;
private Paint paint;
private int paintsize = 1;
private FileOutputStream fos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
iv_show = (ImageView) findViewById(R.id.iv_bg);
//創(chuàng)建一個空白的bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
copyBm = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
//創(chuàng)建畫布
final Canvas canvas = new Canvas(copyBm);
//使用畫布繪制圖片
paint = new Paint();
canvas.drawBitmap(bitmap,new Matrix(), paint);
iv_show.setImageBitmap(copyBm);
//為畫筆在屏幕上移動設(shè)置監(jiān)聽事件
iv_show.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//獲取當前事件的類型
int action = event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
//如果是手指按下時,記錄一下手指的位置
x = event.getX();
y = event.getY();
Log.e(TAG,x+"******"+y);
break;
case MotionEvent.ACTION_MOVE:
//如果手指正在移動時
float x1 = event.getX();
float y1 = event.getY();
canvas.drawLine(x,y,x1,y1, paint);
x = x1;
y = y1;
Log.e(TAG,x1+"**********"+y1);
break;
case MotionEvent.ACTION_UP:
break;
}
iv_show.setImageBitmap(copyBm);
return true;
}
});
}
//修改顏色
public void color(View view) {
paint.setColor(Color.RED);
}
//修改線條粗細
public void size(View view) {
paintsize+=1;
paint.setStrokeWidth(paintsize);
}
//保存圖片
public void save(View view) {
//設(shè)置圖片保存的位置
File file = new File(Environment.getExternalStorageDirectory(), SystemClock.currentThreadTimeMillis()+".png");
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//設(shè)置參數(shù)保存的質(zhì)量
copyBm.compress(Bitmap.CompressFormat.PNG,100,fos);
//定義一個意圖,通過發(fā)出廣播告訴系統(tǒng)掃描指定的位置的文件
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file));
sendBroadcast(intent);
}
}
③ 權(quán)限信息
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中監(jiān)聽系統(tǒng)網(wǎng)絡(luò)連接打開或者關(guān)閉的實現(xiàn)代碼
本篇文章對Android中監(jiān)聽系統(tǒng)網(wǎng)絡(luò)連接打開或者關(guān)閉的實現(xiàn)用實例進行了介紹。需要的朋友參考下2013-05-05
安卓(Android)中如何實現(xiàn)滑動導(dǎo)航
導(dǎo)航是移動應(yīng)用最重要的方面之一,對用戶體驗是良好還是糟糕起著至關(guān)重要的作用。好的導(dǎo)航可以讓一款應(yīng)用更加易用并且讓用戶快速上手。相反,糟糕的應(yīng)用導(dǎo)航很容易讓人討厭,并遭到用戶的拋棄。2014-08-08
Android Studio 3.6運行模擬器時Emulator警告問題的解決方案
這篇文章主要介紹了Android Studio 3.6運行模擬器時Emulator警告問題的解決方案,本文給大家介紹的非常詳細,對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
Android中應(yīng)用界面主題Theme使用方法和頁面定時跳轉(zhuǎn)應(yīng)用
在Android SDK中內(nèi)置了下面的Theme,可以按標題欄Title Bar和狀態(tài)欄Status Bar是否可見來分類,感興趣的朋友可以了解下哈2013-06-06
Android自定義控件實現(xiàn)icon+文字的多種效果
這篇文章主要為大家詳細介紹了Android自定義控件實現(xiàn)icon+文字的多種效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
Android開發(fā)必知 九種對話框的實現(xiàn)方法
App中少不了與用戶交互的各種dialog,以此達到很好的用戶體驗,下面給大家介紹Android開發(fā)必知 九種對話框的實現(xiàn)方法,有需要的朋友可以參考下2015-08-08

