ActivityGroup基本菜单



 

ActivityGroup可以让多个Activity同时运行在一个屏幕上

 

 

准备图片,它们的名字分别为:picture、menu_exit、menu_main、menu_more、

menu_news、menu_selected、menu_sms、pic_m。

 

 

在main.xml中:

 

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="#000000"

    android:gravity="center_horizontal"

    android:orientation="vertical">

  <RelativeLayout

      android:layout_width="fill_parent"

      android:layout_height="fill_parent">

      <LinearLayout

          android:id="@+id/content"

          android:orientation="vertical"

          android:layout_width="fill_parent"

          android:layout_height="fill_parent">

      </LinearLayout>

      <GridView

          android:id="@+id/gridviewbar"

          android:layout_width="fill_parent"

          android:layout_height="wrap_content"

          android:layout_alignParentBottom="true"

          android:fadingEdgeLength="5dp"

          android:fadingEdge="vertical"/>

  </RelativeLayout>

</LinearLayout>

 

 

 

 

新建布局文件mylayout.xml:

 

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="#000000"

    android:gravity="center_horizontal"

    android:orientation="vertical">

  <ImageView

      android:layout_marginTop="60dp"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:src="@drawable/picture"/>

</LinearLayout>

 

 

 

 

 

 

 

定义一个BaseAdapter类的子类MenuImageAdapter,以负责所内容的填充操作。

 

package com.li.activitygroupproject;

 

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

 

public class MenuImageAdapter extends BaseAdapter {

  private ImageView[] menuImg; // 保存所有要填充的组件

  private Context context = null; // 上下文对象

  private int selectedMenuImg; // 选中的索引

 

  public MenuImageAdapter(Context context, int imgIds[], int width,

       int height, int selectedMenuImg) {

     this.context = context;

     this.selectedMenuImg = selectedMenuImg;

     this.menuImg = new ImageView[imgIds.length]; // 开辟新的数组

     for (int x = 0; x < imgIds.length; x++) {

       this.menuImg[x] = new ImageView(this.context); // 实例化ImageView

       this.menuImg[x].setLayoutParams(new GridView.LayoutParams(width,

            height)); // 设置图片的大小

       this.menuImg[x].setAdjustViewBounds(false); // 不调整边界显示

       this.menuImg[x].setPadding(3, 3, 3, 3);// 设置间距

       this.menuImg[x].setImageResource(imgIds[x]);// 设置显示图片

     }

  }

 

  public int getCount() {

     return this.menuImg.length;

  }

 

  public Object getItem(int position) {

     return this.menuImg[position];

  }

 

  public long getItemId(int position) {

     return 0;

  }

 

  public View getView(int position, View convertView, ViewGroup parent) {

     ImageView imgView = null ;

     if(convertView == null) {

       imgView = this.menuImg[position] ;

     } else {

       imgView = (ImageView) convertView ;

     }

     return imgView;

  }

 

  public void setFocus(int selId) {  // 设置选中的显示

     for (int x = 0; x < this.menuImg.length; x++) {

       if (x != selId) {  // 没有选中的

         this.menuImg[x].setBackgroundResource(0) ;  // 不设置背景图片

       }

     }

    this.menuImg[selId].setBackgroundResource(this.selectedMenuImg) ;

  }

}

 

 

 

 

新建一个MyActivity.java类,用于显示图片:

 

package com.li.activitygroupproject;

 

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.MenuItem;

import android.support.v4.app.NavUtils;

 

public class MyActivity extends Activity {

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.mylayout);

    }

}

 

 

 

 

 

 

在MyActivityGroupDemo.java中:

 

package com.li.activitygroupproject;

 

import android.app.ActivityGroup;

import android.app.AlertDialog;

import android.app.Dialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.graphics.Color;

import android.graphics.drawable.ColorDrawable;

import android.os.Bundle;

import android.view.Gravity;

import android.view.KeyEvent;

import android.view.View;

import android.view.ViewGroup.LayoutParams;

import android.view.Window;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.GridView;

import android.widget.LinearLayout;

 

public class MyActivityGroupDemo extends ActivityGroup {

  private GridView gridviewToolbar; // 工具菜单栏

  private MenuImageAdapter menu = null; // 图片适配器

  private LinearLayout content = null; // 填充内容

  private int menu_img[] = new int[] { R.drawable.menu_main,

       R.drawable.menu_news, R.drawable.menu_sms, R.drawable.menu_more,

       R.drawable.menu_exit }; // 填充的图片的资源

  private int width = 0; // 求出平均的宽度

  private int height = 0; // 求出平均的高度,定位显示

  private Intent intent = null;

 

  @Override

  public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     super.requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消标题

     super.setContentView(R.layout.main);

     this.gridviewToolbar = (GridView) super.findViewById(R.id.gridviewbar);

     this.content = (LinearLayout) super.findViewById(R.id.content);

 

     // 定义工具栏的一些信息显示

     this.gridviewToolbar.setNumColumns(this.menu_img.length); // 求出可以保存的个数

     this.gridviewToolbar.setSelector(new ColorDrawable(Color.TRANSPARENT));

     this.gridviewToolbar.setGravity(Gravity.CENTER);

     this.gridviewToolbar.setVerticalSpacing(0);

 

     this.width = super.getWindowManager().getDefaultDisplay().getWidth()

         / this.menu_img.length;

     this.height = super.getWindowManager().getDefaultDisplay().getHeight() / 8;

 

     this.menu = new MenuImageAdapter(this, this.menu_img, this.width,

         this.height, R.drawable.menu_selected);

     this.gridviewToolbar.setAdapter(this.menu);

     this.switchActivity(0); // 第一个被选中

     this.gridviewToolbar

         .setOnItemClickListener(new OnItemClickListenerImpl());

  }

 

  private class OnItemClickListenerImpl implements OnItemClickListener {

 

     public void onItemClick(AdapterView<?> parent, View view, int position,

         long id) {

       MyActivityGroupDemo.this.switchActivity(position);

     }

  }

 

  private void switchActivity(int id) { // 切换选中的操作

     this.menu.setFocus(id); // 设置选中图片的背景

     this.content.removeAllViews(); // 删除所有的内容

     switch (id) {

     case 0:

       this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);

       break;

     case 1:

       this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);

       break;

     case 2:

       this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);

       break;

     case 3:

       this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);

       break;

     case 4:

       this.exitDialog() ;

       return;

     }

     this.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

     Window subActivity = super.getLocalActivityManager().startActivity(

         "subActivity", this.intent);

     this.content.addView(subActivity.getDecorView(),

         LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

  }

 

  private void exitDialog() {

     Dialog dialog = new AlertDialog.Builder(this).setIcon(R.drawable.pic_m)

         .setTitle("程序退出? ").setMessage("您确定要退出本程序吗?")

         .setPositiveButton("确定", new DialogInterface.OnClickListener() {

 

           public void onClick(DialogInterface dialog, int which) {

              MyActivityGroupDemo.this.finish() ;

            }

         })

         .setNegativeButton("取消", new DialogInterface.OnClickListener() {

 

           public void onClick(DialogInterface dialog, int which) {

              MyActivityGroupDemo.this.switchActivity(0);

            }

         }).create();

 

     dialog.show();

  }

 

  @Override

  public boolean onKeyDown(int keyCode, KeyEvent event) {

     if(keyCode == KeyEvent.KEYCODE_BACK) {

       this.exitDialog() ;

     }

     return false ;

  }

 

}

 

 

 

 

修改AndroidManifest.xml:

 

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

    package="com.li.activitygroupproject"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />

 

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MyActivityGroupDemo"

            android:label="@string/title_activity_my_activity_group_demo" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity android:name=".MyActivity"/>

        <activity android:name=".MenuImageAdapter"/>

    </application>

 

</manifest>

 

 

具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)内容概要:本文介绍了一个涵盖多个科研领域的综合性MATLAB仿真资源集合,重点聚焦于光伏发电系统中基于粒子群优化(PSO)算法的最大功率点追踪(MPPT)技术的Simulink仿真实现。文档还列举了多种MPPT方法(如P&O、增量电导法、神经网络、模糊逻辑控制等),并展示了该团队在电力系统、智能优化算法、机器学习、路径规划、无人机控制、信号处理等多个方向的技术服务能力与代码实现案例。整体内容以科研仿真为核心,提供大量可复现的Matlab/Simulink模型和优化算法应用实例。; 适合人群:具备一定电力电子、自动控制或新能源背景,熟悉MATLAB/Simulink环境,从事科研或工程仿真的研究生、科研人员及技术人员。; 使用场景及目标:①学习并实现光伏系统中基于粒子群算法的MPPT控制策略;②掌握多种智能优化算法在电力系统与自动化领域的建模与仿真方法;③获取可用于论文复现、项目开发和技术攻关的高质量仿真资源。; 阅读建议:建议结合提供的网盘资料,按照研究方向选取对应模块进行实践,重点关注Simulink模型结构与算法代码逻辑的结合,注重从原理到仿真实现的全过程理解,提升科研建模能力。
热成像人物检测数据集 一、基础信息 数据集名称:热成像人物检测数据集 图片数量: 训练集:424张图片 验证集:121张图片 测试集:61张图片 总计:606张热成像图片 分类类别: - 热成像人物:在热成像图像中的人物实例 - 非热成像人物:在非热成像或普通图像中的人物实例,用于对比分析 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。数据来源于热成像和视觉图像,覆盖多种场景条件。 二、适用场景 热成像监控与安防系统开发: 数据集支持目标检测任务,帮助构建能够在低光、夜间或恶劣环境下自动检测和定位人物的AI模型,提升监控系统的可靠性和实时响应能力。 红外视觉应用研发: 集成至红外摄像头或热成像设备中,实现实时人物检测功能,应用于安防、军事、救援和工业检测等领域。 学术研究与创新: 支持计算机视觉与热成像技术的交叉研究,助力开发新算法用于人物行为分析或环境适应型检测模型。 教育与培训: 可用于高校或培训机构,作为学习热成像人物检测和AI模型开发的教学资源,提升实践技能。 三、数据集优势 精准标注与多样性: 每张图片均由专业标注员标注,确保边界框定位准确,类别分类清晰。包含热成像和非热成像类别,提供对比数据,增强模型的泛化能力和鲁棒性。 场景实用性强: 数据覆盖多种环境条件,如不同光照和天气,模拟真实世界应用,适用于复杂场景下的人物检测任务。 任务适配性高: YOLO标注格式兼容主流深度学习框架(如YOLOv5、YOLOv8等),可直接加载使用,支持快速模型开发和评估。 应用价值突出: 专注于热成像人物检测,在安防、监控和特殊环境检测中具有重要价值,支持早期预警和高效决策。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值