-
Android 天气预报毕业设计论文含项目源码
Android 天气预报毕业设计论文含项目源码,由天津职业技术师范大学本科生魏杰设计创作,这个天气预报Android源代码为用户提供一个方便快捷的天气信息查看方式,用户只需要简单的点击操作,就可以查看当天天气,软件可以列举遍及全国34个盛直辖市和自治区,精确到县(区)的天气情况,并搭配与天气相对的背景图片与小图标,给用户以直接美观的软件体验。
经过一段时间的努力,终于完成了目前水平的手机天气预报软件,这是我第一次完整的从头到尾完成的一个Android项目,虽然功能简单,界面也没有过多的修饰,但是对我之前学习Android也算是做了个总结,将之前学过的大多数功能都运用进了这个App
关键词:Android;天气预报;JAVA;JSON。
- 2022-08-18 23:48:08下载
- 积分:1
-
单片机+ESP8266实现WIFI无线插座 程序
【实例简介】通过WiFi控制灯泡亮灭,实现无线控制和墙壁开关双联开关的控制
- 2021-08-09 00:31:00下载
- 积分:1
-
android 仿微信浏览相册图片例子源码下载
[实例简介] 仿微信浏览相册图片, 相册浏览 [实例截图] [核心代码]import java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;import android.app.Activity;import android.app.ProgressDialog;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.provider.MediaStore;import android.util.DisplayMetrics;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.widget.GridView;import android.widget.PopupWindow.OnDismissListener;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.zhy.bean.ImageFloder;import com.zhy.imageloader.ListImageDirPopupWindow.OnImageDirSelected;public class MainActivity extends Activity implements OnImageDirSelected{ private ProgressDialog mProgressDialog; /** * 存储文件夹中的图片数量 */ private int mPicsSize; /** * 图片数量最多的文件夹 */ private File mImgDir; /** * 所有的图片 */ private List mImgs; private GridView mGirdView; private MyAdapter mAdapter; /** * 临时的辅助类,用于防止同一个文件夹的多次扫描 */ private HashSet mDirPaths = new HashSet(); /** * 扫描拿到所有的图片文件夹 */ private List mImageFloders = new ArrayList(); private RelativeLayout mBottomLy; private TextView mChooseDir; private TextView mImageCount; int totalCount = 0; private int mScreenHeight; private ListImageDirPopupWindow mListImageDirPopupWindow; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { mProgressDialog.dismiss(); // 为View绑定数据 data2View(); // 初始化展示文件夹的popupWindw initListDirPopupWindw(); } }; /** * 为View绑定数据 */ private void data2View() { if (mImgDir == null) { Toast.makeText(getApplicationContext(), "擦,一张图片没扫描到", Toast.LENGTH_SHORT).show(); return; } mImgs = Arrays.asList(mImgDir.list()); /** * 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗; */ mAdapter = new MyAdapter(getApplicationContext(), mImgs, R.layout.grid_item, mImgDir.getAbsolutePath()); mGirdView.setAdapter(mAdapter); mImageCount.setText(totalCount "张"); }; /** * 初始化展示文件夹的popupWindw */ private void initListDirPopupWindw() { mListImageDirPopupWindow = new ListImageDirPopupWindow( LayoutParams.MATCH_PARENT, (int) (mScreenHeight * 0.7), mImageFloders, LayoutInflater.from(getApplicationContext()) .inflate(R.layout.list_dir, null)); mListImageDirPopupWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1.0f; getWindow().setAttributes(lp); } }); // 设置选择文件夹的回调 mListImageDirPopupWindow.setOnImageDirSelected(this); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DisplayMetrics outMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(outMetrics); mScreenHeight = outMetrics.heightPixels; initView(); getImages(); initEvent(); } /** * 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹 */ private void getImages() { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show(); return; } // 显示进度条 mProgressDialog = ProgressDialog.show(this, null, "正在加载..."); new Thread(new Runnable() { @Override public void run() { String firstImage = null; Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver mContentResolver = MainActivity.this .getContentResolver(); // 只查询jpeg和png的图片 Cursor mCursor = mContentResolver.query(mImageUri, null, MediaStore.Images.Media.MIME_TYPE "=? or " MediaStore.Images.Media.MIME_TYPE "=?", new String[] { "image/jpeg", "image/png" }, MediaStore.Images.Media.DATE_MODIFIED); Log.e("TAG", mCursor.getCount() ""); while (mCursor.moveToNext()) { // 获取图片的路径 String path = mCursor.getString(mCursor .getColumnIndex(MediaStore.Images.Media.DATA)); Log.e("TAG", path); // 拿到第一张图片的路径 if (firstImage == null) firstImage = path; // 获取该图片的父路径名 File parentFile = new File(path).getParentFile(); if (parentFile == null) continue; String dirPath = parentFile.getAbsolutePath(); ImageFloder imageFloder = null; // 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~) if (mDirPaths.contains(dirPath)) { continue; } else { mDirPaths.add(dirPath); // 初始化imageFloder imageFloder = new ImageFloder(); imageFloder.setDir(dirPath); imageFloder.setFirstImagePath(path); } int picSize = parentFile.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpg") || filename.endsWith(".png") || filename.endsWith(".jpeg")) return true; return false; } }).length; totalCount = picSize; imageFloder.setCount(picSize); mImageFloders.add(imageFloder); if (picSize > mPicsSize) { mPicsSize = picSize; mImgDir = parentFile; } } mCursor.close(); // 扫描完成,辅助的HashSet也就可以释放内存了 mDirPaths = null; // 通知Handler扫描图片完成 mHandler.sendEmptyMessage(0x110); } }).start(); } /** * 初始化View */ private void initView() { mGirdView = (GridView) findViewById(R.id.id_gridView); mChooseDir = (TextView) findViewById(R.id.id_choose_dir); mImageCount = (TextView) findViewById(R.id.id_total_count); mBottomLy = (RelativeLayout) findViewById(R.id.id_bottom_ly); } private void initEvent() { /** * 为底部的布局设置点击事件,弹出popupWindow */ mBottomLy.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mListImageDirPopupWindow .setAnimationStyle(R.style.anim_popup_dir); mListImageDirPopupWindow.showAsDropDown(mBottomLy, 0, 0); // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = .3f; getWindow().setAttributes(lp); } }); } @Override public void selected(ImageFloder floder) { mImgDir = new File(floder.getDir()); mImgs = Arrays.asList(mImgDir.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpg") || filename.endsWith(".png") || filename.endsWith(".jpeg")) return true; return false; } })); /** * 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗; */ mAdapter = new MyAdapter(getApplicationContext(), mImgs, R.layout.grid_item, mImgDir.getAbsolutePath()); mGirdView.setAdapter(mAdapter); // mAdapter.notifyDataSetChanged(); mImageCount.setText(floder.getCount() "张"); mChooseDir.setText(floder.getName()); mListImageDirPopupWindow.dismiss(); }}
- 2015-04-08下载
- 积分:1
-
Atmel AVR 的控制器的 USB 在线编程器
USBasp 是 USB 电路在程序员为 Atmel AVR 的控制器。它只是由 ATMega48 或 ATMega8 和几个无源元件组成.
程序员使用固件-仅限于 USB 驱动程序,没有特殊的 USB 控制器需要。
特点:
-在多个平台下的作品。Linux、 Mac OS X 和 Windows 进行测试。
-无特殊控制器或 smd 组件需要。
-编程速度高达 5kBytes/秒。
-SCK 选项以支持低时钟速度 (< 1,5 兆赫) 的目标。
-计划: 目标 (例如,用于调试) 的串行接口。
- 2022-02-04 11:03:07下载
- 积分:1
-
Android客户端访问web服务器,实现一个登录功能
服务端+数据库+安卓端通过Android客户端访问web服务器,实现一个登录功能。
- 2022-03-13 12:55:46下载
- 积分:1
-
Android 演示Socket通信的例子 包括了服务器端代码
Android 演示Socket通信的例子 包括了服务器端、客户端代码,以及测试的主程序。在本实例中,演示了采用两种方法实现添加线程,演示了Socket通信的建立方法,在客户端中连接到本机的端口号是5500,测试将数据输入流、输出流连接到socket,在输入测试时,输入半径数值发送到服务器,输入bye结束,程序会反复读用户数据并计算,服务端线程将监听是否有客户端连接到服务器了。
注意两种按键监听的写法,一种需要执行OnClickListener接口,btnOut.setOnClickListener(this);并且重写 @Override,另一种是:rev.setOnClickListener(new receiverlistenr());需要写内部类:class receiverlistenr implements OnClickListener。控件的设置不能在子线程中操作,需要在主线程中。
- 2022-06-19 12:32:46下载
- 积分:1
-
android 简单Webview封装android 简单Webview封装
android 简单Webview封装 android 简单Webview封装
- 2022-03-29 17:35:58下载
- 积分:1
-
录音和播放
android语音录制和播放,部分代码://播放
player.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (!playState) {
mediaPlayer = new MediaPlayer();
String url = "file:///sdcard/my/voice.amr";
try
{
//模拟器里播放传url,真机播放传getAmrPath()
mediaPlayer.setDataSource(url);
//mediaPlayer.setDataSource(getAmrPath());
mediaPlayer.prepare();
mediaPlayer.start();
player.setText("正在播放");
playState=true;
//设置播放结束时监听
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (playState) {
player.setText("播放声音");
playState=false;
}
}
});
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalStateException e)
{
// TODO
- 2022-07-22 16:56:11下载
- 积分:1
-
Android 图片阴影图片影子效果
Android 生成图片阴影图片影子效果,在实例中,用一个复选框的图片来演示效果,生成阴影的代码片段如下:
canvas.drawColor(Color.WHITE);//设置画布颜色
canvas.save(Canvas.MATRIX_SAVE_FLAG);
dbe.setColorFilter(0x7f000000,PorterDuff.Mode.SRC_IN);
canvas.translate(posX + (int)(0.9 * PicWidth/2), posY + PicHegiht/2);//图像平移为了刚好在原图后形成影子效果。
canvas.skew(-0.9F, 0.0F);//图像倾斜效果。
canvas.scale(1.0f, 0.5f);//图像(其实是画布)缩放,Y方向缩小为1/2。
dbe.draw(canvas);//此处为画原图像影子效果图,比原图先画,则会在下层。
drawable.clearColorFilter();
canvas.restore();
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawable.draw(canvas);//此处为画原图像,由于canvas有层次效果,因此会盖在影子之上。
canvas.restore();
//默认无效果原图
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawTest.draw(canvas);
canvas.restore();
//图片阴影效果
canvas.save(Canvas.MATRIX_SAVE_FLAG);
//Rect rect = new Rect(2*posX + PicWidth, 2*posY + PicHegiht, 2*posX + 2*PicWidth, 2*posY + 2*PicHegiht);//此为理论上的阴影图坐标
Rect rect = new Rect(2*posX + PicWidth + 3, 2*posY + PicHegiht + 3, 2*posX + 2*PicWidth - 2, 2*posY + 2*PicHegiht - 2);
//由于图片的实际尺寸比显示出来
- 2022-07-23 03:30:50下载
- 积分:1
-
安卓人脸检测
安卓人脸检测通过两个主要的API,Android提供了一个直接在位图上进行脸部检测的方法,这两个API分别是 android.media.FaceDetector和android.media.FaceDetector.Face,已经包含在Android官方API中
- 2023-07-16 17:20:05下载
- 积分:1