团队项目开发冲刺日(二)

  今天我完成的很少,因为课表上显示今天是满课,从早上8点一直上到晚上9点35,下午专业课老师布置了其他任务,总之先汇报今日的学习情况。

  参考博客:https://www.cnblogs.com/jenson138/p/4451484.html

今天按照这篇博客实现了从相册中选取照片或调用相机拍取照片,追加了截图,最后回显的功能。我在编写过程中捋顺了一下思路:定义一个ImageView用来显示图片;按钮上进行区分,确认是从相册获取还是使用相机拍照;回显使用bitmap,uri。

!!!:编写的代码跟参考的博客是一样的,目的主要是学习回显的思路与方法。

UI设计的xml文件如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context=".MainActivity">
 8 
 9     <Button
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:onClick="gallery"
13         android:text="获取图库图片"
14         ></Button>
15 
16     <Button
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:onClick="camera"
20         android:text="拍照获取图片"
21         ></Button>
22 
23     <ImageView
24         android:id="@+id/iv_image"
25         android:layout_width="wrap_content"
26         android:layout_height="wrap_content"
27         ></ImageView>
28 </LinearLayout>

这次没有再像昨天那样追求界面了,我选择先摸清后台功能。这里需要注意的是android:onCilck需要与后台对应的函数连接,否则会报错,我以前实现按钮一直是给出id再在后台声明,像这段代码这种调用方式我还是第一次用。

接下来看一下后台java:

  1 package com.example.toa;
  2 
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.content.Intent;
  6 import android.graphics.Bitmap;
  7 import android.net.Uri;
  8 import android.os.Environment;
  9 import android.provider.MediaStore;
 10 import android.view.View;
 11 import android.widget.ImageView;
 12 import android.widget.Toast;
 13 import java.io.File;
 14 
 15 public class MainActivity extends Activity {
 16     //划分,判断使用什么方法获取图片
 17     private static final int PHOTO_REQUEST_CAMERA = 1;
 18     private static final int PHOTO_REQUEST_GALLERY = 2;
 19     private static final int PHOTO_REQUEST_CUT = 3;
 20 
 21     private ImageView iv_image;
 22 
 23     private static final String PHOTO_FILE_NAME = "temp_photo.jpg";
 24     private File tempFile;
 25 
 26     @Override
 27     protected void onCreate(Bundle savedInstanceState) {
 28         super.onCreate(savedInstanceState);
 29         setContentView(R.layout.activity_main);
 30 
 31         this.iv_image = (ImageView)findViewById(R.id.iv_image);
 32     }
 33 
 34     //对应xml中的onClick:gallery,这里直接调用相册
 35     public void gallery(View view){
 36         Intent intent = new Intent(Intent.ACTION_PICK);
 37         intent.setType("image/*");
 38         startActivityForResult(intent,PHOTO_REQUEST_GALLERY);
 39     }
 40 
 41     //对应xml中的onClick:camera,调用相机
 42     public void camera(View view){
 43         Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
 44         if(hasSdcard()){
 45             tempFile = new File(Environment.getExternalStorageDirectory(),PHOTO_FILE_NAME);
 46             Uri uri = Uri.fromFile(tempFile);
 47             intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
 48         }
 49         startActivityForResult(intent,PHOTO_REQUEST_CAMERA);
 50     }
 51 
 52     //截取
 53     private void crop(Uri uri){
 54         Intent intent = new Intent("com.android.camera.action.CROP");
 55         intent.setDataAndType(uri,"image/*");
 56         intent.putExtra("crop","true");
 57         //设置一比一比例
 58         intent.putExtra("aspectX",1);
 59         intent.putExtra("aspectY",1);
 60         //设置图片大小
 61         intent.putExtra("outputX",250);
 62         intent.putExtra("outputY",250);
 63         //保存格式
 64         intent.putExtra("outputFormat","JPEG");
 65         intent.putExtra("noFaceDetection",true);
 66         intent.putExtra("return-data",true);
 67         startActivityForResult(intent,PHOTO_REQUEST_CUT);
 68     }
 69 
 70     //判断是否插入sd卡
 71     private boolean hasSdcard(){
 72         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
 73             return true;
 74         }else{
 75             return false;
 76         }
 77     }
 78 
 79     @Override
 80     protected void onActivityResult(int requestCode, int resultCode, Intent data){
 81         //前两次判定都使用uri获取数据,但无论哪次判定都会调用截取方法
 82         if(requestCode == PHOTO_REQUEST_GALLERY){
 83             if(data != null){
 84                 Uri uri = data.getData();
 85                 crop(uri);
 86             }
 87         }else if(requestCode == PHOTO_REQUEST_CAMERA){
 88             if(hasSdcard()){
 89                 crop(Uri.fromFile(tempFile));
 90             }else{
 91                 Toast.makeText(MainActivity.this,"未找到存储卡,无法存储照片!",Toast.LENGTH_SHORT).show();
 92             }
 93             //截取方法,截取后进行图片回显
 94         }else if(requestCode == PHOTO_REQUEST_CUT){
 95             if(data != null){
 96                 //使用Bitmap进行回显
 97                 Bitmap bitmap = data.getParcelableExtra("data");
 98                 this.iv_image.setImageBitmap(bitmap);
 99             }
100             try{
101                 //删除临实文件
102                 tempFile.delete();
103             }catch(Exception e){
104                 e.printStackTrace();
105             }
106         }
107         //执行
108         super.onActivityResult(requestCode,resultCode,data);
109     }
110 }

方法思路很清晰,就是获取图片数据后使用uri进行处理,在截取方法完成后使用bitmap进行回显,最后删除掉为构造uri而使用的临实文件变量。

下面附上效果图(虚拟机实现,手机没有插sd卡)

初始界面

选择在相册中选取

 

 

选择使用相机

 最后的最后,附上下午老师布置的任务,使用python爬取CVPR论文的题目,链接,摘要。并完成网页或APP的可视化分类和点击显示功能。因为晚上7点有数学建模的大课,下课都9点35了,我只写了python爬取部分,代码如下:

 1 import re
 2 import requests
 3 from bs4 import BeautifulSoup
 4 
 5 #网址,这个网站提供了CVPR论文的题目,链接信息,还有pdf格式的论文全文
 6 r = requests.get('http://openaccess.thecvf.com/ICCV2019.py')
 7 soup = BeautifulSoup(r.text,'lxml')
 8 #简单的按条件寻找标签
 9 for item in soup.find_all('a',href=re.compile('content_ICCV_2019/html/')):
10     print(item.string)
11     print(item['href'])
12     #这里拿出的'href'没有http那段开头,想再读取链接进入网址,我在前面拼了上去,这个网址里可以获取摘要信息
13     ra = requests.get('http://openaccess.thecvf.com/'+item['href'])
14     soupa = BeautifulSoup(ra.text, 'lxml')
15     diva = soupa.find(attrs={"id": "abstract"})
16     #根据给出的BUG信息,网址有的论文点进去发生了Not Found错误,需要加个判断语句
17     if(diva == None):
18         print("-1")
19     else:
20         print(diva.string)
21     #用来区分
22     print("____________")

一开始给的网址爬出来的是pdf网址信息。。。不知道怎么在pdf那一大段文本里单抽出摘要信息。换了一个网址就好多了,剩下的只要把爬取信息录入数据库,python部分就完成了。

项目方面,明日的安排是图片多选功能实现,并完成图片和文本录入数据库操作(核心),若有余力则考虑UI方面的设计。

猜你喜欢

转载自www.cnblogs.com/20183711PYD/p/12701812.html