zoukankan      html  css  js  c++  java
  • 团队项目开发冲刺日(二)

      今天我完成的很少,因为课表上显示今天是满课,从早上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方面的设计。

  • 相关阅读:
    【转】C++虚函数表
    vector的增长模式
    C++ 四种类型强制转换
    【转】new和malloc的区别
    C++堆和栈的区别
    C/C++中的内存分区
    mySQL__function课堂笔记和练习
    mySQL__storage课堂笔记和练习
    mySQL__Variable课堂笔记和练习
    mySQL__View课堂笔记和练习
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/12701812.html
Copyright © 2011-2022 走看看