android项目 之 记事本(8) ----- 画板功能之撤销、恢复和清空

        上一节讨论了手写功能中的删除、恢复和清空功能,那么,画板也就是涂鸦怎么能没有撤销、恢复与清空的功能呢,今天就来实现下。

        终于会做gif图了,看下面的动态图,是不是和QQ白板功能很像。

       

        之前就简单的只实现了在画板上绘图的功能,所以当时将自定义view直接写在了activity中,这一节由于要实现撤销、恢复及清空的功能,所以将分离出来,单独写成了一个java文件PaintView.java,在该自定义view中实现画板的基本操作。

         因为将自定义view单独分离出来,所以需要改到activity的布局文件:如下

         activity_paint.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    
     >
   <com.example.notes.PaintView
       android:id="@+id/paint_layout"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       ></com.example.notes.PaintView>
   
    <GridView 
       android:id="@+id/paintBottomMenu" 
       android:layout_width="match_parent"
       android:layout_height="45dp"
       android:numColumns="auto_fit"
       android:background="@drawable/navigationbar_bg"
       android:horizontalSpacing="10dp"
       android:layout_alignParentBottom="true"
       ></GridView>

</RelativeLayout>

         其中com.example.notes.PaintView为自定义view

         

        这节要实现的操作有撤销,恢复,清空和保存,下面分别讨论三个操作的主要思想:

        要实现撤销与恢复,这里有个前提,就是要将每次绘制的路径存入栈中,这里是存入List中。

             1. 撤销功能:

                   前提:将每次绘制的路径存入List中,即存入savePath中

                   步骤:

                           1) 将画布清空,这里可以使用画成的初始化操作
                           2)  将savePath中的最后一个路径保存到另一个List中,即deletePath(用于恢复),并且将此路径从savePath中删除

                           3)  取出savePath中的所有的路径,重绘在画布上面

          

            2. 恢复功能:

                   前提:将每次撤销的路径存入List中,即存入deletePath中

                   步骤:

                           1)  取出deletePath中的最后一个路径,并保存到savePath中

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在Android记事本应用程序中添加拍照功能,需要进行如下步骤: 1. 添加权限:在AndroidManifest.xml文件中添加以下权限 ```xml <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 2. 在布局文件中添加一个Button或ImageView,用于触发拍照事件。 3. 在Java代码中添加以下代码,用于处理拍照事件 ```java private static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); // 将图片存储到文件或数据库中 } } ``` 4. 在AndroidManifest.xml文件中添加以下provider,用于保存图片 ```xml <provider android:name="androidx.core.content.FileProvider" android:authorities="com.example.mynotebook.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> ``` 5. 在res/xml目录下创建file_paths.xml文件,添加以下代码 ```xml <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="Android/data/com.example.mynotebook/files/Pictures" /> </paths> ``` 6. 将拍摄的图片保存到文件中。 ```java private File createImageFile() throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); File image = File.createTempFile( imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ); // Save a file: path for use with ACTION_VIEW intents currentPhotoPath = image.getAbsolutePath(); return image; } ``` 7. 将图片显示在ImageView或者列表中。 参考代码: https://github.com/MindorksOpenSource/android-mvp-architecture/tree/master/app/src/main/java/com/mindorks/framework/mvp/ui/photo_gallery

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值