首页 > 其他分享 >Android 实现简单的画画版一

Android 实现简单的画画版一

时间:2023-02-14 10:35:41浏览次数:41  
标签:layout 画画 private event int new Android 版一 android


原理:
1)首先创建一个创建一张空白图片
2)把空白图片设置到imageview控件
3)给imageview设置监听,并返回值true;

代码如下:

/**
* @描述 画板
* @项目名称 App_Basic
* @包名 com.example.basic.image
* @类名 CanvaImage
* @author chenlin
* @version 1.0
*/

public class CanvaImageActivty extends BaseActivity implements OnTouchListener, OnClickListener {
private Button mBtnView;
private ImageView mImageView;
private Bitmap mBlankBitmap;
private Canvas mCanvas;
private Paint mPaint;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_canvas);
mBtnView = (Button) findViewById(R.id.btn_view_image);
mImageView = (ImageView) findViewById(R.id.iv_canvas);

mImageView.setOnTouchListener(this);
mBtnView.setOnClickListener(this);

createBitmap();
}

private void createBitmap() {
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
mBtnView.measure(0, 0);

int height = outMetrics.heightPixels - mBtnView.getMeasuredHeight();
// 创建一张空白图片
mBlankBitmap = Bitmap.createBitmap(outMetrics.widthPixels, height, Config.ARGB_8888);
// 创建一张画布
mCanvas = new Canvas(mBlankBitmap);
//画布背景为白色
mCanvas.drawColor(Color.WHITE);

//初始化画笔
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(3);

//绘制白色背景
mCanvas.drawBitmap(mBlankBitmap, new Matrix(), mPaint);
mImageView.setImageBitmap(mBlankBitmap);
}

private int downX;
private int downY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 获取手按下时的坐标
downX = (int) event.getX();
downY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
// 获取手移动后的坐标
int moveX = (int) event.getX();
int moveY = (int) event.getY();

// 在开始和结束坐标间画一条线
mCanvas.drawLine(downX, downY, moveX, moveY, mPaint);
// 实时更新开始坐标
downX = (int) event.getX();
downY = (int) event.getY();
mImageView.setImageBitmap(mBlankBitmap);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
//mImageView.setImageBitmap(mBlankBitmap);
//保存图片到sdcard
saveBitmap(mBlankBitmap);
break;

}
return true;
}

private void saveBitmap(Bitmap bitmap) {
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/image/";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
String filename = System.currentTimeMillis() + ".jpg";
FileOutputStream fos = new FileOutputStream(new File(path, filename));
//把保存图片
bitmap.compress(CompressFormat.JPEG, 100, fos);
fos.close();

notifyHasMount();


} catch (FileNotFoundException e) {
e.printStackTrace();
show("保存失败" + e.getMessage());
} catch (IOException e) {
e.printStackTrace();
show("保存失败" + e.getMessage());
}
}

/**
* 模拟一个广播,通知系统sdcard被挂载
* */
private void notifyHasMount() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
}
/**
* 查看图片
*/
@Override
public void onClick(View v) {
if (v == mBtnView) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivity(intent);
}

}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
android:id="@+id/iv_canvas"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"

/>

<Button
android:id="@+id/btn_view_image"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查看图片" />

</LinearLayout>

标签:layout,画画,private,event,int,new,Android,版一,android
From: https://blog.51cto.com/u_12516227/6055873

相关文章

  • 2023-02-14 Apps targeting Android 12 and higher are required to specify an expli
    新建android项目,选择basicactive一项,在跑模拟器的时候,报错。解决方案:找到AndroidManifest.xml文件,在<activity里面添加一行属性 android:exported="true"详情Gpt给出......
  • Android Fragment的三种应用方式
    应用方式一:动态的使用Fragment首先是,MainActivity的布局文件activity_main.xml,该文件布局文件上面的顶部是一个TitleFragment,是一个静态声明的Fragment。中间也是一个Fr......
  • Android 之 环境搭建
    1.Gradlegradle跟maven一样是一个包管理工具,Android项目默认的包管理工具,这两天使用下来,感觉比maven更加简洁,其他暂时没啥赶脚。1.1配置Javagradle需要java8+1.2......
  • AppsFlyer SDK 接入( Android )
    第1步:声明存储库在Project项目目录的build.gradle文件中,声明mavenCentral存储库://...repositories{mavenCentral()}///...第2步:添加依赖项在Application的build......
  • 2023-02-13 Android studio打包apk到手机上(模拟器也一样)运行时闪退
    环境:Rn项目apk,win10,android手机,as版本为4.2.2。======================================================================================================这是由chatG......
  • 2023-02-13 【Android studio内存不足】 Out of memory: Java heap space. Configure
    我的as版本:4.2.2测试环境:Android要修改as内存,需要修改两个地方:1、打开as,找到帮助==>更改内存设置==>最大堆大小,把2048修改成你想要的值,我是改成了8192,就是8g内存,接着重......
  • Android_Handler
    [CallBack]JAVA回调函数简单讲解CallBackJava-回调函数 [Handler]Java中Handler的标准使用方式 Handler全解Handler源码分析-Java层 ......
  • Android Studio各种bug
    AndroidStudio3.2版本,新建工程后,出现了如下bug:       暂时解决办法如下:点击OpenFile后,会打开app文件,原始的依赖文件如下:   将“33.”删除,修......
  • android开发kotlin顶级函数和拓展函数的实现原理
    android开发kotlin顶级函数和拓展函数的实现原理//我们编写的源代码在MainActivity.kt下面,如下:funtopTest(){print("123")}funMainActivity.extTest(){pr......
  • 第 21 章 使用 Java 编写 Android 应用
    21.1Android的历史......................................35721.2编写Android应用.................................35821.2.1组织Android项目..................