笔记如下
如图:
- 实现步骤:
首先是布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
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="com.chen.panel.MainActivity">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:onClick=""
android:id="@+id/color_red"
android:background="#ff0000"
android:layout_width="35dp"
android:layout_height="35dp"/>
<View
android:id="@+id/color_green"
android:background="#00ff00"
android:layout_width="35dp"
android:layout_height="35dp"/>
<View
android:id="@+id/color_blue"
android:background="#0000ff"
android:layout_width="35dp"
android:layout_height="35dp"/>
<View
android:id="@+id/color_yellow"
android:background="#ffff00"
android:layout_width="35dp"
android:layout_height="35dp"/>
<View
android:id="@+id/color_pink"
android:background="#ff99ff"
android:layout_width="35dp"
android:layout_height="35dp"/>
</LinearLayout>
<!--画笔 -->
<SeekBar
android:id="@+id/skb_stroke"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/iv"
android:layout_width="200dp"
android:layout_height="200dp"
/>
<Button
android:onClick="save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存图片"
/>
</LinearLayout>
调节颜色的方法
protected void onCreate(Bundle savedInstanceState) {
.............
color_red.setOnClickListener(this);
color_green.setOnClickListener(this);
color_blue.setOnClickListener(this);
color_pink.setOnClickListener(this);
color_yellow.setOnClickListener(this);
...........
}
//点击换颜色的点击事件
@Override
public void onClick(View v) {
switch(v.getId()){
//更改画笔的颜色
case R.id.color_red:
paint.setColor(Color.RED);
break;
case R.id.color_yellow:
paint.setColor(Color.YELLOW);
break;
case R.id.color_green:
paint.setColor(Color.GREEN);
break;
case R.id.color_blue:
paint.setColor(Color.BLUE);
break;
case R.id.color_pink:
paint.setColor(0xffff99ff);
break;
default:
break;
}
}
ImageView的触摸事件
float startX = 0;
float startY = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
//触摸ImageView的回调
//触摸的时候绘制我们的图像,并且显示
/*
Touch时有三种情况:event.getAction()
1.手指按下
2.手指移动
3.手指抬起
*/
switch (event.getAction()){
case MotionEvent.ACTION_DOWN://1次
//1.手指按下
startX = event.getX();//触摸的x坐标
startY = event.getY();//触摸的y坐标
// startX = event.getRawX();
// startY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE://0-多次
//2.手指移动
//绘制图像,并显示到ImageView上
float stopX = event.getX();
float stopY = event.getY();
// float stopX = event.getRawX();
// float stopY = event.getRawY();
System.out.println("x :" + stopX + " y : " + stopY);
canvas.drawLine(startX,startY,stopX,stopY,paint);
iv.setImageBitmap(bitmap);
startX = stopX;
startY = stopY;
break;
case MotionEvent.ACTION_UP://1次
//3.手指抬起
break;
default:
break;
}
return true;
}
seeBar的调节画笔大小的stop事件
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//改变画笔的粗细
int progress = seekBar.getProgress();
//paint.setStrokeWidth(progress);
paint.setStrokeWidth(10 * progress /100f + 0.5f);
}
完整源码:
package com.chen.panel;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, View.OnTouchListener {
private View color_red;
private View color_green;
private View color_yellow;
private View color_blue;
private View color_pink;
private SeekBar skb_stroke;
private ImageView iv;
private Bitmap bitmap;
private Canvas canvas;
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermission();
color_red = findViewById(R.id.color_red);
color_green = findViewById(R.id.color_green);
color_yellow = findViewById(R.id.color_yellow);
color_blue = findViewById(R.id.color_blue);
color_pink = findViewById(R.id.color_pink);
skb_stroke = (SeekBar) findViewById(R.id.skb_stroke);
iv = (ImageView) findViewById(R.id.iv);
color_red.setOnClickListener(this);
color_green.setOnClickListener(this);
color_blue.setOnClickListener(this);
color_pink.setOnClickListener(this);
color_yellow.setOnClickListener(this);
skb_stroke.setOnSeekBarChangeListener(this);
iv.setOnTouchListener(this);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
float density = metrics.density;
System.out.println(density);
//先准备我们的画板
bitmap = Bitmap.createBitmap((int) (200*density), (int) (200*density), Bitmap.Config.ARGB_8888);
//准备画纸
canvas = new Canvas(bitmap);
//画布默认是黑底的,所以要一开始画成白底的
canvas.drawColor(Color.WHITE);
//准备画笔
paint = new Paint();
}
private void requestPermission(){
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ //表示未授权时
//进行授权
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}else{
//调用打电话的方法
Toast.makeText(this, "权限已经申请了.", Toast.LENGTH_SHORT).show();
}
}
//保存图片
public void save(View view){
//File file = new File(Environment.getDataDirectory()+"/data/com.chen.panel/"+System.currentTimeMillis()+".jpg");
File file = new File(Environment.getExternalStorageDirectory()+"/"+System.currentTimeMillis()+".jpg");
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
//压缩到流中
bitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
} catch (Exception e) {
e.printStackTrace();
}finally {
if (out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
out = null;
}
}
}
//点击换颜色的点击事件
@Override
public void onClick(View v) {
switch(v.getId()){
//更改画笔的颜色
case R.id.color_red:
paint.setColor(Color.RED);
break;
case R.id.color_yellow:
paint.setColor(Color.YELLOW);
break;
case R.id.color_green:
paint.setColor(Color.GREEN);
break;
case R.id.color_blue:
paint.setColor(Color.BLUE);
break;
case R.id.color_pink:
paint.setColor(0xffff99ff);
break;
default:
break;
}
}
//seebar实现
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//改变画笔的粗细
int progress = seekBar.getProgress();
//paint.setStrokeWidth(progress);
paint.setStrokeWidth(10 * progress /100f + 0.5f);
}
float startX = 0;
float startY = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
//触摸ImageView的回调
//触摸的时候绘制我们的图像,并且显示
/*
Touch时有三种情况:event.getAction()
1.手指按下
2.手指移动
3.手指抬起
*/
switch (event.getAction()){
case MotionEvent.ACTION_DOWN://1次
//1.手指按下
startX = event.getX();//触摸的x坐标
startY = event.getY();//触摸的y坐标
// startX = event.getRawX();
// startY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE://0-多次
//2.手指移动
//绘制图像,并显示到ImageView上
float stopX = event.getX();
float stopY = event.getY();
// float stopX = event.getRawX();
// float stopY = event.getRawY();
System.out.println("x :" + stopX + " y : " + stopY);
canvas.drawLine(startX,startY,stopX,stopY,paint);
iv.setImageBitmap(bitmap);
startX = stopX;
startY = stopY;
break;
case MotionEvent.ACTION_UP://1次
//3.手指抬起
break;
default:
break;
}
return true;
}
}