精华内容
下载资源
问答
  • AndroidStudio使用opencv,android开发项目实例
    千次阅读
    2022-01-10 13:17:51

    android:layout_width=“wrap_content”

    android:layout_height=“wrap_content”

    android:text=“灰度化”

    android:id="@+id/textView_togray" />

    <ImageView

    android:layout_width=“match_parent”

    android:layout_height=“match_parent”

    android:id="@+id/imageView_after" />

    MainActivity.java文件:

    package edu.finu.cse.opencv2;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.os.Bundle;

    import android.util.Log;

    import android.view.Gravity;

    import android.view.View;

    import android.widget.ImageView;

    import android.widget.TextView;

    import android.widget.Toast;

    import androidx.appcompat.app.AppCompatActivity;

    import org.opencv.android.BaseLoaderCallback;

    import org.opencv.android.LoaderCallbackInterface;

    import org.opencv.android.OpenCVLoader;

    import org.opencv.android.Utils;

    import org.opencv.core.Mat;

    import org.opencv.imgproc.Imgproc;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    ImageView img_after;

    TextView text_togray;

    Bitmap srcBitmap;

    Bitmap grayBitmap;

    private static boolean flag = true;

    //private static boolean isFirst = true;

    private static final String TAG = “MainActivity”;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    img_after=(ImageView)findViewById(R.id.imageView_after);

    text_togray=(TextView)findViewById(R.id.textView_togray);

    text_togray.setOnClickListener(this);

    }

    //OpenCV库加载并初始化成功后的回调函数

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

    @Override

    public void onManagerConnected(int status) {

    // TODO Auto-generated method stub

    switch (status){

    case BaseLoaderCallback.SUCCESS:

    Log.i(TAG, “成功加载”);

    Toast toast = Toast.makeText(getApplicationContext(),

    “成功加载!”, Toast.LENGTH_LONG);

    toast.setGravity(Gravity.CENTER, 0, 0);

    toast.show();

    break;

    default:

    super.onManagerConnected(status);

    Log.i(TAG, “加载失败”);

    Toast toast1 = Toast.makeText(getApplicationContext(),

    “加载失败!”, Toast.LENGTH_LONG);

    toast1.setGravity(Gravity.CENTER, 0, 0);

    toast1.show();

    break;

    }

    }

    };

    public void procSrc2Gray(){

    Mat rgbMat = new Mat();

    Mat grayMat = new Mat();

    srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.duling);

    grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);

    Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.

    Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat

    Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap

    Log.i(TAG, “procSrc2Gray sucess…”);

    }

    @Override

    public void onClick(View v)

    {

    switch(v.getId())

    {

    case R.id.textView_togray:

    procSrc2Gray();

    img_after.setImageBitmap(grayBitmap) ;

    break;

    }

    }

    @Override

    public void onResume()

    {

    super.onResume();

    if (!OpenCVLoader.initDebug()) {

    Log.d(TAG, “Internal OpenCV library not found. Using OpenCV Manager for initialization”);

    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, mLoaderCallback);

    } else {

    Log.d(TAG, “OpenCV library found inside package. Using it!”);

    mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);

    }

    }

    }

    AndroidManifest.xml文件:

    修改项目的Manifest.xml。因为新添加了Activity,这个Activity用到了相机权限等,所以要注册权限。

    <?xml version="1.0" encoding="utf-8"?>

    <manifest xmlns:android=“http://schemas.android.com/apk/res/android”

    package=“edu.finu.cse.opencv2”>

    <application

    android:allowBackup=“true”

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"

    android:roundIcon="@mipmap/ic_launcher_round"

    android:supportsRtl=“true”

    android:theme="@style/AppTheme">

    <activity android:name=".ImageManipulationsActivity"

    android:label=“MyTest”

    android:screenOrientation=“landscape”

    android:configChanges=“keyboardHidden|orientation”>

    <uses-featurexu

    android:name=“android.hardware.camera”

    android:required=“false” />

    <uses-feature

    android:name=“android.hardware.camera.autofocus”

    android:required=“false” />

    <uses-feature

    android:name=“android.hardware.camera.front”

    android:required=“false” />

    <uses-feature

    android:name=“android.hardware.camera.front.autofocus”

    android:required=“false” />

    效果

    在这里插入图片描述

    三.训练库


    1.准备训练数据

    训练样本分两类:正样本和负样本。正样本是希望识别的物体的图像。负样本是其他物体的图像(不含有希望识别的物体)。正样本的图像大小应当一致,负样本不做要求,但是必须大于等于正样本图像。

    负样本

    负样本可以是任意图像,但是这些图像中不能包含待检测的物体。用于抠取负样本的图像文件名被列在一个文件中。这个文件是纯文本文件,文件中每行是一个文件名(包括路径和文件名)。这些图像可以是不同的尺寸,但是图像尺寸应该比训练窗口的尺寸大(比正样本大),因为这些图像将被用于抠取负样本,并将负样本缩小到训练窗口大小。

    下面是一个描述文件的例子:

    假如目录结构如下:

    /img

    img1.jpg

    img2.jpg

    bg.txt

    则bg.txt文件中的内容将如下所示:

    img/img1.jpg

    img/img2.jpg

    不管是负样本还是正样本,要想训练出识别率较高的分类器,样本数据都不会少,因此描述文件明显是不能手写的,下面是一个制作描述文件的方法。

    C:\Users\Hasee>D:

    D:>cd D:\opencvcar\car_sample

    D:\opencvcar\car_sample>dir /b>text.txt

    D:\openc
    vcar\car_sample>

    先进入存有图像的目录,然后通过输出重定向将文件名一次性存到指定的文件中。然后通过文本编辑器的替换功能在每一行的行头添加文件的路径。

    正样本

    正样本的描述文件中的每一行除了图像的文件名和文件路径以外,还需要提供一些参数,下面是一个例子。

    D:\opencvcar\car_sample\ImgData1.bmp 1 0 0 33 33

    其中,1表示该图像中希望识别的物体的数量;0,0,33,33,标示其在图像中的位置和大小的矩形为(0, 0, 33, 33)。

    正样本由 opencv_createsamples 生成。opencv_createsamples 是opencv提供的创建正样本的可执行程序。

    以下是生成正样本的一个批处理文件的例子,

    opencv_createsamples.exe -info car_list.txt -vec car_samples.vec -bg ng_data.txt -num 580 -w 33 -h 33

    pause

    文本编辑器的替换功能在每一行的行头添加文件的路径。

    正样本

    正样本的描述文件中的每一行除了图像的文件名和文件路径以外,还需要提供一些参数,下面是一个例子。

    D:\opencvcar\car_sample\ImgData1.bmp 1 0 0 33 33

    其中,1表示该图像中希望识别的物体的数量;0,0,33,33,标示其在图像中的位置和大小的矩形为(0, 0, 33, 33)。

    正样本由 opencv_createsamples 生成。opencv_createsamples 是opencv提供的创建正样本的可执行程序。

    以下是生成正样本的一个批处理文件的例子,

    opencv_createsamples.exe -info car_list.txt -vec car_samples.vec -bg ng_data.txt -num 580 -w 33 -h 33

    pause

    更多相关内容
  • Android Studio 实例程序

    2021-04-29 14:12:41
    使用android studio 开发的一款测试软件,该软件只实现了简单的布局和命令,适用于初学者参考,大佬勿下
  • android中HTTP请求模式运用实例源码可运行,Android studio版本
  • Android Studio项目的Fragment实例,包括三个:简单例子,使用在平板和手机有不同效果的,实现tabs的例子。
  • Android studio实例——hello world

    千次阅读 2021-03-06 23:18:29
    Android studio实例——hello world任务一、二、三、四、总结与参考资料1、总结2、参考资料 任务 1、创建一个hello world的程序; 2、新建一个hello world工程,实现生成APK,并为APP重新设计一个启动图标; 3、为...

    任务

    1、创建一个hello world的程序;
    2、新建一个hello world工程,实现生成APK,并为APP重新设计一个启动图标;
    3、为安装的Android studio配置自己熟悉的快捷键和操作页面;
    接上篇文章。
    智能终端应用程序开发——Andriod Studio安装.

    一、hello world程序实例

    1、创建新项目

    双击打开Android studio,点击create new project;
    在这里插入图片描述
    选择一个界面;
    在这里插入图片描述
    设置信息;
    在这里插入图片描述
    点击finish出现界面如下;
    在这里插入图片描述

    2、报错处理

    问题一
    Android studio底端出现报错;
    在这里插入图片描述

    Failed to open zip file.Gradle’s dependency cache may be corrupt(this sometimes occurs after a network connection timeout(译文:打开zip压缩文件失败,.Gradle下面的依赖缓存可能被破坏(这有时发生在网络连接超时之后))

    当出现这种情况的时候,找到工程里的gradle-wrapper.properties;
    在这里插入图片描述
    点击打开;
    在这里插入图片描述
    将https改为http;
    在这里插入图片描述
    找到“build”——“rebuild project”;
    重新编译后就没有刚刚的错误了。
    问题二

    在这里插入图片描述

    错误原因:是由于首次安装,AndroidStudio需要初始化,或导入了其它项目后,需要下载gradle压缩包,但在下载的过程中,遇到了网络阻塞,导致下载超时而报错

    我们选择手动下载;

    https://www.tkres.cn/#/toolList.

    点击链接进入下载界面;
    在这里插入图片描述
    根据自己的报错,选择匹配的gradle下载;
    这个网址需要注册登录,下载资料还要money,我们可以直接复制我们需要的压缩包名称,百度找资源。
    如果有和我一样都是gradle-6.5-bin.zip的,可以选择下面这个网盘进行提取下载;

    链接:https://pan.baidu.com/s/16rNgoIhXJVsNZe8LWHGQQA
    提取码:uo6s

    打开压缩包所在目录,关闭AndroidStudio,然后将dists文件夹中的所有文件都删除掉,将下载好的压缩包,解压到当前目录(dists)即可,打开AndroidStudio,稍等一会,如果出现一直显示loading…,那么请重新新建一个Android项目即可。

    C:\Users\darker.gradle\caches\6.5

    咱也是一个Android studio的小白,遇到的问题都是Baidu解决。

    3、run hello world

    按照上述解决问题,重启Android studio;在跑程序,就会出现如下界面;
    在这里插入图片描述

    在这里插入图片描述
    这次任务没有选择真机的连接,用的模拟器。真机在后面会为大家介绍的。
    程序界面主代码:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    二、Android studio 导出apk

    请大家按照图示操作,经本人亲测完成的。
    Android Studio菜单Build->Generate Signed bundle or APK
    在这里插入图片描述
    点击,选择apk;
    在这里插入图片描述
    弹出如图窗口
    在这里插入图片描述
    选择新建。界面如下;
    在这里插入图片描述

    Key store path:密钥库文件的地址
    Password/Confirm:密钥库的密码
    Key:
    Alias:密钥名称
    Password/Confirm:密钥密码
    Validity(years):密钥有效时间
    First and Last Name:密钥颁发者姓名
    Organizational Unit:密钥颁发组织
    City or Locality:城市
    state or province:区域或省份
    Country Code(XX):国家

    补充填写信息;
    在这里插入图片描述
    自己随意搞得话,会出现如下报错;
    在这里插入图片描述
    解决方法参考:

    android studio生成JKS时候提示:JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore.

    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore houserenting.jks -destkeystore ho….

    后面就可以了。
    也可以选择如下方式:
    在这里插入图片描述
    查看文件:
    在这里插入图片描述

    三、Android studio配置快捷键与操作界面

    Android Studio 快速配置及其快捷键使用.

    1、基本配置

    设置背景颜色
    在这里插入图片描述
    在这里插入图片描述
    修改字体
    在这里插入图片描述
    设置log颜色
    在这里插入图片描述
    在这里插入图片描述
    快捷键配置
    在这里插入图片描述

    2、常用快捷键功能

    快捷键:
    代码提示:ctrl+alt+空格
    代码格式化:Ctrl+Alt+L
    代码移动类的:
    上下移动代码:ctrl+shift+上下箭头
    复制一行代码:ctrl+d
    删除一行代码:ctrl+y
    方法间的切换:alt+上下箭头
    选中代码:ctrl+w
    代码查看类的:
    打开一个file:ctrl+shift+n
    打开一个类:ctrl+n
    查看一个变量的声明:ctrl+b 等价于ctrl+鼠标左键
    查看一个类的父类:ctrl+u
    查看一个方法的调用:ctrl+alt+h
    在类中查看一个方法的实现:ctrl+shift+i
    显示类的结构图:ctrl+h
    代码返回快捷键:ctrl+alt+left/right
    窗口返回键:alt+left/right
    代码折行与展开:ctrl+小键盘的±
    隐藏工程模板:alt+1
    查找类中的方法或变量:ctrl+shift+alt+n
    查看类中的所有方法:ctrl+f12
    复写父类的方法:ctrl+o
    快速跳到方法的开头和结尾:ctrl+【】
    打开最近文件:ctrl+e

    写代码的:
    选中一段代码,按此组合键,可快速添加if,for,try/catch等语句:ctrl+alt+t
    生产相关代码块:ctrl+j fbc(findviewbyid) toast 各种代码块很简单
    定义未定义的变量:alt+enter
    格式和代码:ctrl+shift+l

    查找替换的
    查找:ctrl+f
    替换:ctrl+r

    快速打印log
    之前eclipse的时候写log都要定义一个TAG需要手打而在Studio中只需打:
    logt 自动生成TAG
    logd 相当于log.d
    logm 直接输出上面要打的log信息

    四、总结与参考资料

    1、总结

    Android Studio 提供了集成的 Android 开发工具用于开发和调试。在刚开始的学习使用过程中,还是遇到了很多问题的,不过Baidu上基本都可以找到解决方案,希望与大家一起学习进步。

    2、参考资料

    Android Studio安装中的问题及第一次运行hello world程序.
    Android Studio教程从入门到精通.
    android studio怎么运行项目.
    Android Hello World 实例.
    AndroidStudio报错:Could not install Gradle distribution from ‘https://services.gradle.org/distribution.
    Android Studio 导出APK.

    展开全文
  • 【下载压缩包并粘贴在纯英文路径下即可运行】用Android Studio开发的录音机实例,可以私信我调试代码。如果运行不出来私信我退积分就可以;功能有:录制音频(非常清晰);PCM-WAV格式转换;播放(播放刚才录制的...
  • 一:ADT和sdk的区别ADT(Android Development Tools):目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级...

    一:ADT和sdk的区别

    ADT(Android Development Tools):

    目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,

    简单理解为在Eclipse下开发工具的升级下载工具。adt只是一个eclipse的插件,里面可以设置sdk路径

    SDK(Software Development Kit):

    一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。

    在Android中,他为开发者提供了库文件以及其他开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包,

    如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。

    二:sdk Manager 设置

    点击Tools->Options,到达如下页面即可添加镜像地址。

    android-mirror.bugly.qq.com

    8080

    f832d199170098e03fc54e7657db460a.png

    SDK Manager镜像源设置

    Tools->Manager Add-on Sites...

    首先把谷歌默认源全部取消选择

    show-1700.html

    c121d81246e5a2b3c04017b934509217.png

    show-1700.html

    show-1700.html

    每个源都New进去

    81f429042fb1a6ae2b81e2ddbe7ef4a4.png

    Tools->Options

    把红圈圈住的地方都打上勾

    show-1700.html

    645463026783452447adde77e6f25b27.png

    文档里提到,配置Daemon,能够加速gradle的构建,为了获取这个性能提上,我也得开启这个Daemon。

    其实就是在用户目录下(C:\Users\用户名\.gradle)找到 .gradel 文件夹

    创建一个文件gradle.properties ,内容是 org.gradle.daemon=true

    然后就可以体验飞一般的速度啦

    展开全文
  • Android Studio点餐项目

    千次阅读 热门讨论 2021-11-20 15:56:34
    要求:拖动预算条能够显示价格,也能根据口味和... 文件结构 ...import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import an...

     

    要求:拖动预算条能够显示价格,也能根据口味和价格查询菜品,点击下一页时提示菜品和用户名

    文件结构

     

    代码如下

    MainActivity.java

    package com.example.task1114;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.SeekBar;
    import android.widget.Toast;
    import android.widget.ToggleButton;
    
    import com.example.task1114.model.Food;
    import com.example.task1114.model.Person;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
         private Button task_searchbutton;
         private EditText task_edittext_name;
         private RadioGroup task_radiogroup;
         private RadioButton task_radiobutton_male,task_radiobutton_female;
         private CheckBox task_checkbox_sweet,task_checkbox_sour,task_checkbox_hot;
         private SeekBar task_seekbar;
         private ImageView task_imageview;
         private ToggleButton task_togglebutton;
         private List<Food> foodsList;
         private List<Food> foodsresult;
         private Person person;
         private boolean isHot;
         private boolean isSour;
         private boolean isSweet;
         private int price;
         private int CurrentIndex;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViews();
            initDate();
           setListenner();
    
        }
    
        private void initDate() {
            foodsList = new ArrayList<>();
            foodsList.add(new Food("桂林米线", 15, R.drawable.guilin, false, false, true));
            foodsList.add(new Food("红烧肉", 40, R.drawable.hongshaorou, false, true, false));
            foodsList.add(new Food("麻辣火锅", 95, R.drawable.malahuoguo, true, false, false));
            foodsList.add(new Food("西芹", 20, R.drawable.xiqin, true, false, false));
            foodsList.add(new Food("麻辣香锅", 70, R.drawable.malaxiangguo, true, false, false));
            foodsList.add(new Food("水煮鱼", 45, R.drawable.shuizhuyu, true, false, false));
            foodsList.add(new Food("清蒸鲈鱼", 50, R.drawable.qingzhengluyu, false, true, false));
            foodsList.add(new Food("木须肉", 30, R.drawable.muxurou, true, false, false));
            foodsList.add(new Food("酸辣汤", 35, R.drawable.suanlatang, true, false, true));
            foodsList.add(new Food("酸菜牛肉面", 10, R.drawable.suncainiuroumian, true, false, true));
            foodsList.add(new Food("娃娃菜", 25, R.drawable.wawacai, true, true, false));
            person = new Person();
        }
    
        private void findViews() {
            task_searchbutton = findViewById(R.id.task_searchbutton);
            task_edittext_name = findViewById(R.id.task_edittext_name);
            task_radiogroup = findViewById(R.id.task_radiogroup);
            task_radiobutton_male = findViewById(R.id.task_radiobutton_male);
            task_radiobutton_female = findViewById(R.id.task_radiobutton_female);
            task_checkbox_sweet = findViewById(R.id.task_checkbox_sweet);
            task_checkbox_sour = findViewById(R.id.task_checkbox_sour);
            task_checkbox_hot = findViewById(R.id.task_checkbox_hot);
            task_seekbar = findViewById(R.id.task_seekbar);
            task_imageview = findViewById(R.id.task_imageview);
            task_togglebutton = findViewById(R.id.task_togglebutton);
        }
    
        private void setListenner() {
            task_radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, int i) {
                    switch (i) {
                        case R.id.task_radiobutton_male:
                            person.setSex("男");
                            break;
                        case R.id.task_radiobutton_female:
                            person.setSex("女");
                            break;
                    }
    
    
                }
            });
            task_checkbox_hot.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                    isHot = b;
                }
            });
            task_checkbox_sour.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                    isSour = b;
                }
            });
            task_checkbox_sweet.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                    isSweet = b;
                }
            });
            task_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
    
                }
    
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
    
                }
    
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    price = task_seekbar.getProgress();
                    Toast.makeText(MainActivity.this, "价格:" + price, Toast.LENGTH_SHORT).show();
    
                }
            });
            task_searchbutton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    search();
    
                }
            });
            task_togglebutton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String input = task_edittext_name.getText().toString();
                    if(task_togglebutton.isChecked()){
                        //  下一个菜
                        CurrentIndex ++;
                        if(CurrentIndex < foodsresult.size()){
                            task_imageview.setImageResource(foodsresult.get(CurrentIndex).getPic());
                        } else {
                            Toast.makeText(MainActivity.this, "没有啦", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        // 显示信息:菜的名称
                        if(CurrentIndex < foodsresult.size()){
                            Toast.makeText(MainActivity.this, "菜名:" + foodsresult.get(CurrentIndex).getName()+";用户:"+input, Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(MainActivity.this, "没有啦", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            });
    //        ?
    
    
    
            }
    
        private void search() {
            if (foodsresult == null) {
                foodsresult = new ArrayList<>();
            }
    
            // 先清除之前的结果
            foodsresult.clear();
            // 当前显示的是结果中的第几个菜
            CurrentIndex = 0;
    
            for (int index = 0; index < foodsList.size(); index++) {
                Food food = foodsList.get(index);
                if (food != null) {
                    // 价格要小于设定的价格
                    // 是顾客选择的口味
                    if (food.getPrice() < price &&
                            (food.isHot() == isHot
                                    || food.isSweet() == isSweet
                                    || food.isSour() == isSour)
                    ) {
                        foodsresult.add(food);
                    }
                }
            }
    
            // 先显示第一张图片
            if (CurrentIndex < foodsresult.size()) {
                task_imageview.setImageResource(foodsresult.get(CurrentIndex).getPic());
            } else {
                task_imageview.setImageResource(R.drawable.ic_launcher_foreground);
            }
        }
    
    
    
    }

    Food.java

    package com.example.task1114.model;
    
    public class Food {
        private String name;
        private int price;
        private int pic;
        private boolean hot;
        private boolean sweet;
        private boolean sour;
    
        public Food(String name, int price, int pic, boolean hot, boolean sweet, boolean sour) {
            this.name = name;
            this.price = price;
            this.pic = pic;
            this.hot = hot;
            this.sweet = sweet;
            this.sour = sour;
        }
    
        public Food() {
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        public int getPic() {
            return pic;
        }
    
        public void setPic(int pic) {
            this.pic = pic;
        }
    
        public boolean isHot() {
            return hot;
        }
    
        public void setHot(boolean hot) {
            this.hot = hot;
        }
    
        public boolean isSweet() {
            return sweet;
        }
    
        public void setSweet(boolean sweet) {
            this.sweet = sweet;
        }
    
        public boolean isSour() {
            return sour;
        }
    
        public void setSour(boolean sour) {
            this.sour = sour;
        }
    
        @Override
        public String toString() {
            return "Food{" +
                    "name='" + name + '\'' +
                    ", price=" + price +
                    ", pic=" + pic +
                    ", hot=" + hot +
                    ", sweet=" + sweet +
                    ", sour=" + sour +
                    '}';
        }
    }
    

    Person.java

    package com.example.task1114.model;
    
    public class Person {
        private String name;
        private String sex;
    
        public String getName() {
            return name;
        }
    
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public Person(String name, String sex) {
            this.name = name;
            this.sex = sex;
    
    
        }
    
        public Person() {
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", sex='" + sex + '\'' +
                    '}';
        }
    }
    

    布局文件activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
        <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
            android:background="#B0E0E6">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/task_name"
                android:textSize="27sp"
                android:textStyle="bold|italic"
                android:textColor="#ff00ff"
                android:gravity="center"
                android:layout_marginTop="10dp"
                >
            </TextView>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:orientation="horizontal"
                android:layout_weight="1"
                >
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_customer_name"
                    android:textSize="20sp"></TextView>
                <EditText
                    android:id="@+id/task_edittext_name"
                    android:layout_width="180dp"
                    android:layout_height="wrap_content"
                    android:hint="@string/task_customer_hint"
                    android:textSize="20sp"
                    android:textColor="#cccccc">
    
                </EditText>
    
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:orientation="horizontal"
                android:layout_weight="1">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_customer_sex"
                    android:textSize="20sp"></TextView>
                <RadioGroup
                    android:id="@+id/task_radiogroup"
                    android:layout_width="match_parent"
                    android:layout_height="30dp"
                    android:orientation="horizontal">
                    <RadioButton
                        android:id="@+id/task_radiobutton_male"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/task_sex_male"
                        android:textSize="20sp"></RadioButton>
                    <RadioButton
                        android:id="@+id/task_radiobutton_female"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/task_sex_female"
                        android:textSize="20sp"></RadioButton>
                </RadioGroup>
    
    
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:orientation="horizontal"
                android:layout_weight="1"
                >
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_hobby"
                    android:textSize="20sp"></TextView>
                    <CheckBox
                        android:id="@+id/task_checkbox_sweet"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/task_hobby_sweet"
                        android:textSize="20sp"></CheckBox>
                <CheckBox
                    android:id="@+id/task_checkbox_hot"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_hobby_hot"
                    android:textSize="20sp"></CheckBox>
                <CheckBox
                    android:id="@+id/task_checkbox_sour"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_hobby_sour"
                    android:textSize="20sp"></CheckBox>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_budget"
                    android:textSize="20sp"
                    ></TextView>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_mincost"
                    android:textSize="20sp"></TextView>
                <SeekBar
                    android:id="@+id/task_seekbar"
                    android:layout_width="220dp"
                    android:layout_height="wrap_content"
                    android:max="100"></SeekBar>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/task_maxcost"
                    android:textSize="20sp"></TextView>
            </LinearLayout>
    
                <Button
                    android:id="@+id/task_searchbutton"
                    android:layout_width="120dp"
                    android:layout_height="50dp"
                    android:text="@string/task_searchbutton"
                   android:layout_gravity="center"
                   ></Button>
    
    
    
    
    
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">
            <ImageView
                android:id="@+id/task_imageview"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher_foreground"></ImageView>
           <ToggleButton
               android:id="@+id/task_togglebutton"
               android:layout_width="120dp"
               android:layout_height="50dp"
               android:textOn="@string/task_listtogbutton"
               android:textOff="@string/task_nexttogbutton"
               android:textSize="20sp"
               android:layout_gravity="center"></ToggleButton>
        </LinearLayout>
    
    
    </LinearLayout>

    values下的stringsxml  //老师说为了提高可用性还是啥来着,走这定义中文😃

    <resources>
        <string name="app_name">task1114</string>
        <string name="task_name">选餐系统</string>
        <string name="task_customer_name">姓名:</string>
        <string name="task_customer_hint">请输入用户名</string>
        <string name="task_customer_sex">性别:</string>
        <string name="task_sex_male">男</string>
        <string name="task_sex_female">女</string>
        <string name="task_hobby">喜好:</string>
        <string name="task_hobby_sour">酸</string>
        <string name="task_hobby_sweet">甜</string>
        <string name="task_hobby_hot">辣</string>
        <string name="task_budget">预算:</string>
        <string name="task_mincost">0元</string>
        <string name="task_maxcost">100元</string>
        <string name="task_searchbutton">查询菜品</string>
        <string name="task_listtogbutton">显示信息</string>
        <string name="task_nexttogbutton">下一页</string>
    
    </resources>

    演示

     

    展开全文
  • Android studio入门到精通实例实验

    千次阅读 2020-12-14 14:08:14
    Android studio入门到精通实例实验 实验内容: 简单考试程序 实验步骤: 一、打开Android studio,新建一个项目; 二、写入代码; <?xml version="1.0" encoding="utf-8"?> <androidx....
  • 自己在真机上测试能连上本地MySQL数据库。实现Android端直接连接MySQL数据库,并能增删改查操作,提取了部分工具...我用的SDK版本是android6.0,没有android 6.0的修改project.properties的target对应自己的版本即可。
  • 1、如图所示,设计一个包含四种题型的简单考试应用程序(具体考试题目可以选用以下设计,也可以自己另外确定),项目名称:zuoye06_666 ;(666,改成自己的实际编号)。 2、布局管理器任选(约束布局相对容易实现)...
  • android studio实例【实测成功】

    千次阅读 2022-01-15 10:18:00
    2、在android studio里面,新建项目 经过一段时间loading,进入工程里面 3、activity_main.xml拖拉控件 拖拉两个Button、一个Plain Text、一个TextView 4、点击魔术棒 即可将Design的控件界面与code的控件...
  • 主要介绍了Android Studio导入so文件到项目中的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
  • 本次项目主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,在删除和修改用户前,可以通过姓名搜索到指定联系人的信息,方便用户操作。使用SQLiteDatabase数据库来存储数据,界面简洁优雅,美观...
  • android studio计算器实例【实测成功】

    千次阅读 2022-01-15 12:13:16
    建立android项目,可参考博主文章至第2步: 拖拉控件 1个button、2个Plain Text(两个数字输入)、3个TextView(+, =, 结果) button: (其中的onClick中的函数calculate,是后面在MainActivity.java里写的...
  • 项目中包括登录,注册,存储信息功能,选项卡切换功能,信息表注册(内含日历,单选,多选的使用),圆形logo的使用,细节蛮多。
  • 最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1、导入就在下载Gradle 2、根本导不进 下面我分2部分来讲解正确的导入姿势: 1、导入完整的Github Project 我们在github...
  • //实例化列表适配器 ListAdapter la = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cursor,new String[]{Contacts.People.NAME,Contacts.People.NUMBER},new int[]{android.R.id.text1,...
  • 7.我使用的是Android Studio,我把文件布局截图放在压缩包里面,还有几个需要注意的地方,特别的坑,尤其是大家需要注意build.gridle(app)这里面大家需要注册导包,你并且配置好自己的SDK。大家还需要注意就是...
  • 1.安装部分不作介绍,会安装 Android Studio 和sdk出现 Android Studio运行程序错误,提示信息:Error:(47, 13) Failed to resolve: com.android.support:appcompat-v7:26.0.0 参考链接 ...
  • Android studio开发-第一个入门例子(十分详细)

    万次阅读 多人点赞 2018-11-16 23:10:31
    举个栗子 实现功能:可以通过页面输入改变要显示的字符,然后通过按钮可以实现显示字符的放大功能。最终如下: 一共四个控件:一个text输入,一个text显示,一个输入修改... file-new-new project 新建一个项目...
  • 功能完善,gradle版本3.3.0或5.4.1,带有详细报告
  • 安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。 设置生命周期的Log日志...
  • Android Studio 导航栏开发 BottomNavigationView+Fragment 简单实例 https://blog.csdn.net/nujun1222/article/details/80079345
  • 本次项目主要实现了天气预报功能。通过调用天气预报接口来获得天气数据,用LIstView和GridView来搭建每个界面,将查询的天气信息存储在SQLiteDatabase中。应用主要包括了五大界面,每一个界面上都会有很多组件: - ...
  • 刚好用AS重构完项目,在网上查阅了一些资料,终于搞定!!在这记录一下。 AS主要是利用gradle来实现这个需求的,具体做法如下: 修改app的build.gradle文件 假设我们同一套代码编译2个app:app1和app2 android { ....
  • Android Studio 修改应用包名实例详解 我们平时新建项目有些朋友可能当时就是随意写的一个包名,然后在项目过程中, 又感觉这个包名不太好,所以就要对包名进行修改,根据我们正常的修改方式,是这样的。 在种情况...
  • 本次通讯录项目主要实现了联系人信息(姓名和电话)的增加、删除、修改和查询功能。主要用到SQLiteDatabase来存储数据,SQLite数据库和其他的SQL数据库不同, 我们并不需要在手机上另外安装一个数据库软件,Android...
  • 1)新建项目empty,必要可github托管。 2)先写页面在res->layout目录下新建两个layout xml file activity_main作为主页面,msg_item为附在其上的消息页面。(具体代码见文末) 这里再acitvity_main采用的不是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,944
精华内容 7,977
关键字:

androidstudio项目实例