编写App的开场Activity 和 扩展ImageView使可旋转

本文介绍如何在Android应用中实现启动画面(SplashActivity),通过设置延迟跳转到主活动,并展示了自定义旋转ImageView的方法。

http://berdy.iteye.com/blog/1768905


在android的app和游戏的应用中,都会有个开场场景,老外管这个叫splash。 
现在就编写个简单的SplashActivity 

Java代码   收藏代码
  1. import android.app.Activity;  
  2. import android.content.Intent;  
  3. import android.os.Bundle;  
  4. import android.widget.ImageView;  
  5.   
  6. public class SplashActivity extends Activity {  
  7.   
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.splash);  
  12.   
  13.         ImageView splashImg = (ImageView) findViewById(R.id.splash_image);  
  14.         splashImg.postDelayed(new Runnable() {//这里利用了View的postDelayed  
  15.   
  16.             public void run() {  
  17.                 Intent intent = new Intent();  
  18.                 intent.setClass(SplashActivity.this, MainActivity.class);  
  19.                 startActivity(intent);  
  20.                 finish();  
  21.             }  
  22.         }, 1000);  
  23.     }  
  24. }  


下面是splash.xml,layout 文件了 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.   
  6.     <ImageView  
  7.         android:id="@+id/splash_background"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent"  
  10.         android:layout_alignParentTop="true"  
  11.         android:layout_centerHorizontal="true"  
  12.         android:scaleType="fitXY"  
  13.         android:src="@drawable/splash_floor" />  
  14.   
  15.     <ImageView  
  16.         android:id="@+id/splash_image"  
  17.         android:layout_width="fill_parent"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_alignParentTop="true"  
  20.         android:layout_centerHorizontal="true"  
  21.         android:scaleType="fitXY"  
  22.         android:src="@drawable/splash_logo" />  
  23.   
  24.     <ImageView  
  25.         android:id="@+id/splash_foot"  
  26.         android:layout_width="wrap_content"  
  27.         android:layout_height="wrap_content"  
  28.         android:layout_alignParentBottom="true"  
  29.         android:layout_centerHorizontal="true"  
  30.         android:layout_marginBottom="10.0dip"  
  31.         android:src="@drawable/splash_logo_foot" />  
  32.   
  33. </RelativeLayout>  


继承ImageView,增加angle属性,重写OnMeasure和OnDraw方法 

Java代码   收藏代码
  1. package com.upon.common.view;  
  2.   
  3. import android.content.Context;  
  4. import android.content.res.TypedArray;  
  5. import android.graphics.Canvas;  
  6. import android.util.AttributeSet;  
  7. import android.widget.ImageView;  
  8.   
  9. import com.upon.xxxx.R;  
  10.   
  11. public class UponRotateImageView extends ImageView {  
  12.   
  13.     private int mAngle;  
  14.   
  15.     public UponRotateImageView(Context context, AttributeSet attrs, int defStyle) {  
  16.         super(context, attrs, defStyle);  
  17.         loadAttributes(context, attrs);  
  18.     }  
  19.   
  20.     public UponRotateImageView(Context context, AttributeSet attrs) {  
  21.         super(context, attrs);  
  22.         loadAttributes(context, attrs);  
  23.     }  
  24.   
  25.     public UponRotateImageView(Context context) {  
  26.         super(context);  
  27.     }  
  28.   
  29.     private void loadAttributes(Context context, AttributeSet attrs) {  
  30.         TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.RotateImageView);  
  31.         mAngle = arr.getInteger(R.styleable.RotateImageView_angle, 0);  
  32.         arr.recycle();  
  33.     }  
  34.   
  35.     public int getAngle() {  
  36.         return mAngle;  
  37.     }  
  38.   
  39.     public void setAngle(int angle) {  
  40.         mAngle = angle;  
  41.     }  
  42.   
  43.     @Override  
  44.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  45.         int w = getDrawable().getIntrinsicWidth();  
  46.         int h = getDrawable().getIntrinsicHeight();  
  47.         double a = Math.toRadians(mAngle);  
  48.   
  49.         int width = (int) (Math.abs(w * Math.cos(a)) + Math.abs(h * Math.sin(a)));  
  50.         int height = (int) (Math.abs(w * Math.sin(a)) + Math.abs(h * Math.cos(a)));  
  51.   
  52.         setMeasuredDimension(width, height);  
  53.         super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  54.     }  
  55.   
  56.     @Override  
  57.     protected void onDraw(Canvas canvas) {  
  58.         canvas.save();  
  59.         canvas.rotate(mAngle % 360, getWidth() / 2, getHeight() / 2);  
  60.         getDrawable().draw(canvas);  
  61.         canvas.restore();  
  62.     }  
  63. }  

attrs.xm文件中增加angle属性 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="RotateImageView">  
  4.         <attr name="angle" format="integer" />  
  5.     </declare-styleable>  
  6.   
  7. </resources>  


使用UponRotateImageView 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:upon="http://schemas.android.com/apk/res/com.upon.xxxx"  
  4.     android:layout_width="wrap_content"  
  5.     android:layout_height="wrap_content" >  
  6.   
  7.     <com.upon.common.view.UponRotateImageView  
  8.         android:id="@+id/bkg_img"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:src="@drawable/conquer_nation_bkg"  
  12.         upon:angle="45" />  
  13.   
  14. </RelativeLayout>  

本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作与持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性与丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块与dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间与闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制与性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值