-
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 studio中完整demo实例源码可运行
2018-01-03 16:09:01android中HTTP请求模式运用实例源码可运行,Android studio版本 -
Fragment实例-Android Studio项目
2015-08-26 18:15:40Android Studio项目的Fragment实例,包括三个:简单例子,使用在平板和手机有不同效果的,实现tabs的例子。 -
Android studio实例——hello world
2021-03-06 23:18:29Android studio实例——hello world任务一、二、三、四、总结与参考资料1、总结2、参考资料 任务 1、创建一个hello world的程序; 2、新建一个hello world工程,实现生成APK,并为APP重新设计一个启动图标; 3、为...Android studio实例——hello world
任务
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压缩包,但在下载的过程中,遇到了网络阻塞,导致下载超时而报错
我们选择手动下载;
点击链接进入下载界面;
根据自己的报错,选择匹配的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配置快捷键与操作界面
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开发的录音机实例
2021-08-20 22:16:22【下载压缩包并粘贴在纯英文路径下即可运行】用Android Studio开发的录音机实例,可以私信我调试代码。如果运行不出来私信我退积分就可以;功能有:录制音频(非常清晰);PCM-WAV格式转换;播放(播放刚才录制的... -
android studio学习之一(示例代码)
2021-05-28 08:09:48一: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
SDK Manager镜像源设置
Tools->Manager Add-on Sites...
首先把谷歌默认源全部取消选择
每个源都New进去
Tools->Options
把红圈圈住的地方都打上勾
三
文档里提到,配置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:14Android studio入门到精通实例实验 实验内容: 简单考试程序 实验步骤: 一、打开Android studio,新建一个项目; 二、写入代码; <?xml version="1.0" encoding="utf-8"?> <androidx.... -
android连接mysql,Android studio项目工程代码
2018-03-23 13:23:49自己在真机上测试能连上本地MySQL数据库。实现Android端直接连接MySQL数据库,并能增删改查操作,提取了部分工具...我用的SDK版本是android6.0,没有android 6.0的修改project.properties的target对应自己的版本即可。 -
android studio实现简单考试应用程序实例代码详解
2021-01-03 13:21:541、如图所示,设计一个包含四种题型的简单考试应用程序(具体考试题目可以选用以下设计,也可以自己另外确定),项目名称:zuoye06_666 ;(666,改成自己的实际编号)。 2、布局管理器任选(约束布局相对容易实现)... -
android studio实例【实测成功】
2022-01-15 10:18:002、在android studio里面,新建项目 经过一段时间loading,进入工程里面 3、activity_main.xml拖拉控件 拖拉两个Button、一个Plain Text、一个TextView 4、点击魔术棒 即可将Design的控件界面与code的控件... -
Android Studio导入so文件到项目中的实例详解
2020-08-29 06:46:41主要介绍了Android Studio导入so文件到项目中的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下 -
Android Studio实现通讯录项目,优秀课设,简单易上手,小白必看!
2022-02-02 23:39:10本次项目主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,在删除和修改用户前,可以通过姓名搜索到指定联系人的信息,方便用户操作。使用SQLiteDatabase数据库来存储数据,界面简洁优雅,美观... -
android studio计算器实例【实测成功】
2022-01-15 12:13:16建立android项目,可参考博主文章至第2步: 拖拉控件 1个button、2个Plain Text(两个数字输入)、3个TextView(+, =, 结果) button: (其中的onClick中的函数calculate,是后面在MainActivity.java里写的... -
通过Android studio 编写的简易安卓项目
2021-06-09 18:32:33该项目中包括登录,注册,存储信息功能,选项卡切换功能,信息表注册(内含日历,单选,多选的使用),圆形logo的使用,细节蛮多。 -
Android Studio导入Project与Module的方法及实例
2021-01-04 11:23:31最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1、导入就在下载Gradle 2、根本导不进 下面我分2部分来讲解正确的导入姿势: 1、导入完整的Github Project 我们在github... -
android studio Listview简单实例
2021-06-04 16:15:17//实例化列表适配器 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,... -
Android Studio DuDuMusic实例及源码 音乐播放器实现SQLite用户注册登录 管理员服务器数据交互
2018-06-10 11:09:287.我使用的是Android Studio,我把文件布局截图放在压缩包里面,还有几个需要注意的地方,特别的坑,尤其是大家需要注意build.gridle(app)这里面大家需要注册导包,你并且配置好自己的SDK。大家还需要注意就是... -
Android Studio 基础入门及示例演示
2021-05-27 02:28:411.安装部分不作介绍,会安装 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 新建一个项目... -
基于 Android studio 开发的记账本,带有详细报告
2021-07-20 17:52:56功能完善,gradle版本3.3.0或5.4.1,带有详细报告 -
《移动项目实践》实验报告——Android Studio环境搭建
2021-09-27 22:10:16安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。 设置生命周期的Log日志... -
Android Studio 导航栏开发 BottomNavigationView+Fragment 简单实例 适合新手
2018-04-26 08:28:57Android Studio 导航栏开发 BottomNavigationView+Fragment 简单实例 https://blog.csdn.net/nujun1222/article/details/80079345 -
Android Studio实现天气预报APP
2021-08-12 21:32:43本次项目主要实现了天气预报功能。通过调用天气预报接口来获得天气数据,用LIstView和GridView来搭建每个界面,将查询的天气信息存储在SQLiteDatabase中。应用主要包括了五大界面,每一个界面上都会有很多组件: - ... -
Android Studio 一个工程打包多个不同包名的APK实例详解
2021-01-04 18:07:23刚好用AS重构完项目,在网上查阅了一些资料,终于搞定!!在这记录一下。 AS主要是利用gradle来实现这个需求的,具体做法如下: 修改app的build.gradle文件 假设我们同一套代码编译2个app:app1和app2 android { .... -
Android Studio 修改应用包名实例详解
2021-01-04 10:27:44Android Studio 修改应用包名实例详解 我们平时新建项目有些朋友可能当时就是随意写的一个包名,然后在项目过程中, 又感觉这个包名不太好,所以就要对包名进行修改,根据我们正常的修改方式,是这样的。 在种情况... -
Android Studio实现通讯录
2021-05-30 11:12:11本次通讯录项目主要实现了联系人信息(姓名和电话)的增加、删除、修改和查询功能。主要用到SQLiteDatabase来存储数据,SQLite数据库和其他的SQL数据库不同, 我们并不需要在手机上另外安装一个数据库软件,Android... -
Android studio开发小型对话机器人app(实例代码)
2021-01-03 13:00:251)新建项目empty,必要可github托管。 2)先写页面在res->layout目录下新建两个layout xml file activity_main作为主页面,msg_item为附在其上的消息页面。(具体代码见文末) 这里再acitvity_main采用的不是...