RyMiniFramework(4)-引导界面

本文介绍了一个名为RMF的应用程序如何实现启动时的引导界面。通过自定义Gallery组件,实现了图片轮播效果,并在最后一张图片时允许用户滑动进入主界面。此外,还介绍了如何设置欢迎界面及延迟显示引导界面的逻辑。

由于引导界面处于欢迎界面和主界面之间, 所以,最后还是把引导界面的实现放在了前面写好的RmfSplash类中。

RMF中引导界面是用gallery来实现,当处于最后一张图片时,向右滑动即可进入主界面。

 

1、cn.rydiy.rmf.common.RmfGuide.java

package cn.rydiy.rmf.common;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

/**
 * Guide Display Class
 * 
 * @author Rydiy
 * @version 1.0.0
 * @Date 2012-07-30
 */
public class RmfGuide {
	private ArrayList<Integer> mImgList; // guide images' id
	private RmfGallery mGallery; // guide gallery
	private Resources mRes; // Resources
	private Activity mAct; // MainActivity
	private int mCurPosition; //gallery current page

	/**
	 * Constructor
	 * 
	 * @param imgs
	 *            : A array of guide-images' id
	 * @param act
	 *            : your object's main activity's instance
	 * @param res
	 *            : A Resources instance for your application's package
	 */
	public RmfGuide(ArrayList<Integer> imgs, Activity act, Resources res) {
		mImgList = imgs;
		mAct = act;
		mRes = res;
		mCurPosition = 0;
	}

	/**
	 * Show guide
	 */
	public void show() {
		//get layout
		LinearLayout layout = (LinearLayout) mAct
				.findViewById(mRes.getIdentifier("rmf_id_splash_ly", "id",
						mAct.getPackageName()));
		mGallery = new RmfGallery(mAct);
		ImageAdapter imgAdapter = new ImageAdapter(mAct);
		mGallery.setAdapter(imgAdapter);
		//add gallery to layout
		layout.removeAllViews();
		layout.addView(mGallery, new LayoutParams(
				LinearLayout.LayoutParams.FILL_PARENT,
				LinearLayout.LayoutParams.FILL_PARENT));
	}

	/**
	 * Custom gallery
	 * @author Rydiy
	 * 
	 */
	private class RmfGallery extends Gallery {
		public RmfGallery(Context context) {
			super(context);
		}

		public RmfGallery(Context context, AttributeSet attrs) {
			super(context, attrs);
		}

		private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
			return e2.getX() > e1.getX();
		}

		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			int kEvent;
			if (isScrollingLeft(e1, e2)) {
				// Check if scrolling left
				kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
			} else {
				// Otherwise scrolling right
				kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;

				//if it is the last page, load main layout
				if (mCurPosition == getSelectedItemPosition()
						&& mCurPosition == getCount() - 1) {
					mAct.setContentView(mRes.getIdentifier("main", "layout",
							mAct.getPackageName()));
				} else {
					mCurPosition = getSelectedItemPosition();
				}

			}

			onKeyDown(kEvent, null);
			return true;
		}

	}

	/**
	 * ImageAdapter for gallery
	 * @author Rydiy
	 * 
	 */
	private class ImageAdapter extends BaseAdapter {
		private Context mContext = null;

		public ImageAdapter(Context c) {
			this.mContext = c;
		}

		public int getCount() {
			return mImgList.size();
		}

		public Object getItem(int position) {
			return position;
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			ImageView mImageView = new ImageView(mContext);
			int id = mImgList.get(position);
			Bitmap bmp = BitmapFactory.decodeResource(mRes, id);
			mImageView.setImageBitmap(bmp);
			mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
			mImageView.setLayoutParams(new android.widget.Gallery.LayoutParams(
					android.widget.Gallery.LayoutParams.FILL_PARENT,
					android.widget.Gallery.LayoutParams.FILL_PARENT));
			return mImageView;
		}
	}
}


 

2、cn.rydiy.rmf.common.RmfSplash.java修改如下:

package cn.rydiy.rmf.common;

import java.util.ArrayList;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

/**
 * Splash Display Class. It will display splash with full screen and then quit
 * full screen.
 * 
 * @author Rydiy
 * @version 1.0.0
 * @Date 2012-07-29
 */
public class RmfSplash {
	private Activity mActivity; // MainActivity
	private int mDelayTime; // delay time
	private int mMainLayoutResID; // /the resource id of the main layout
	private int mSplashLayoutResID; // /the resource id of the splash layout
	private int mSplashImgViewResID; // /the resource id of the splash imageview
	private int mSplashImgResID; // the resource id of the splash image data
	private ArrayList<Integer> mGuideImgs; // imags for guide
	private Handler mHandler; // message handler
	private Resources mRes; // the resources object containing the image data

	/**
	 * Constructor
	 * 
	 * @param mainActivity
	 *            :Application's main acitivity
	 */
	public RmfSplash(Activity mainActivity) {
		this.mActivity = mainActivity;
	}

	/**
	 * Set splash settings
	 * @param res
	 *            :The resources object containing the image data
	 * @param splashImgResID
	 *            :The resource id of the image data
	 */
	public void setSplash(Resources res, int splashImgResID) {
		this.mRes = res;
		String packageName = mActivity.getPackageName();
		// get R.layout.main
		mMainLayoutResID = mRes.getIdentifier("main", "layout", packageName);
		setSplash(res, splashImgResID, mMainLayoutResID);
	}

	/**
	 * Set splash settings
	 * @param res
	 *            :The resources object containing the image data
	 * @param splashImgResID
	 *            :The resource id of the image data
	 * @param mainLayoutResID
	 *            :The resource id of the application's main layout
	 */
	public void setSplash(Resources res, int splashImgResID, int mainLayoutResID) {
		this.mRes = res;
		this.mSplashImgResID = splashImgResID;
		this.mMainLayoutResID = mainLayoutResID;

		String packageName = mActivity.getPackageName();
		// get R.layout.rmf_ly_splash
		mSplashLayoutResID = mRes.getIdentifier("rmf_ly_splash", "layout",
				packageName);
		// get R.id.rmf_id_splash_img
		mSplashImgViewResID = mRes.getIdentifier("rmf_id_splash_img", "id",
				packageName);
		// create Handler
		mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				if (1 == msg.arg1) {
					Log.d("RMF", "RmfSplash recive handler");
					// quit full screen
					quiteFullScreen();
					// show guideView
					if (null == mGuideImgs) {
						mActivity.setContentView(mMainLayoutResID);
					} else {
						showGuide();
					}
				}
			}
		};
	}

	/**
	 * Show splash and guide
	 * @param delayTime
	 *            : Time for splash display
	 */
	public void show(int delayTime) {
		Log.d("RMF", "RmfSplash show()");
		this.mDelayTime = delayTime;
		// no title
		mActivity.requestWindowFeature(Window.FEATURE_NO_TITLE);
		// full screen
		mActivity.getWindow().setFlags(
				WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		// set splash layout
		mActivity.setContentView(mSplashLayoutResID);

		// load bitmap
		Bitmap bmp = BitmapFactory.decodeResource(mActivity.getResources(),
				mSplashImgResID);
		ImageView img = (ImageView) mActivity.findViewById(mSplashImgViewResID);
		img.setImageBitmap(bmp);

		// delay time
		new Thread() {
			public void run() {
				Message msg = Message.obtain(mHandler);
				msg.arg1 = 1;
				mHandler.sendMessageDelayed(msg, mDelayTime);
			};
		}.start();
	}

	/**
	 * Set images for guide
	 * @param guideImgs
	 *            :Images for guide
	 */
	public void setGuide(ArrayList<Integer> guideImgs) {
		mGuideImgs = guideImgs;
	}

	/**
	 * Quite full screen
	 */
	private void quiteFullScreen() {
		final WindowManager.LayoutParams attrs = mActivity.getWindow()
				.getAttributes();
		attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
		mActivity.getWindow().setAttributes(attrs);
		mActivity.getWindow().clearFlags(
				WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
	}

	/**
	 * Show guide view
	 */
	private void showGuide() {
		SharedPreferences appInfo = mActivity.getPreferences(0);
		Boolean first = appInfo.getBoolean("first", true);
		if (first) {
			// first time, show guide
			appInfo.edit().putBoolean("first", false).commit();
			RmfGuide rmfGuide = new RmfGuide(mGuideImgs, mActivity, mRes);
			rmfGuide.show();
		} else {
			// Not the first time, set main layout
			mActivity.setContentView(mMainLayoutResID);
		}
	}
}


3、调用

 

       Log.d("RMF", "OnCreate");

        //new RmfSplash
        RmfSplash rSplash = new RmfSplash(this);
        
        //imgs for guide
        ArrayList<Integer> imgs = new ArrayList<Integer>();
        imgs.add(R.drawable.feature_guide_0);
        imgs.add(R.drawable.feature_guide_1);
        imgs.add(R.drawable.feature_guide_2);
        imgs.add(R.drawable.feature_guide_3);
        //set imgs to RmfSplash
        rSplash.setGuide(imgs);

        //set splash settings
        //rSplash.setSplash(getResources(), R.drawable.rmf_img_splash);      
        rSplash.setSplash(getResources(), R.drawable.rmf_img_splash, R.layout.rmf_ly_tabmain);
        
        //show splash and guide
        rSplash.show(3000);

 

现在的版本可以指定加载的主layout,  默认为main.layout

代码下载地址: https://pan.quark.cn/s/b4a8e0160cfc 齿轮与轴系零件在机械设备中扮演着至关重要的角色,它们负责实现动力传输、调整运动形态以及承受工作载荷等核心功能。 在机械工程的设计实践中,齿轮和轴系的设计是一项关键的技术任务,其内容涵盖了材料选用、构造规划、承载能力分析等多个技术层面。 下面将系统性地介绍《齿轮及轴系零件结构设计指导书》中的核心知识点。 一、齿轮设计1. 齿轮种类:依据齿廓轮廓的不同,齿轮可划分为直齿齿轮、斜齿轮以及人字齿轮等类别,各类齿轮均具有特定的性能特点与适用工况,能够满足多样化的工作环境与载荷需求。 2. 齿轮规格参数:模数大小、压力角数值、齿数数量、分度圆尺寸等是齿轮设计的基础数据,这些参数直接决定了齿轮的物理尺寸与运行性能。 3. 齿轮材质选用:齿轮材料的确定需综合评估其耐磨损性能、硬度水平以及韧性表现,常用的材料包括铸铁、钢材、铝合金等。 4. 齿轮强度验证:需进行齿面接触应力分析与齿根弯曲应力分析,以确保齿轮在实际运行过程中不会出现过度磨损或结构破坏。 5. 齿轮加工工艺:涉及切削加工、滚齿加工、剃齿加工、淬火处理等工艺流程,工艺方案的选择将直接影响齿轮的加工精度与使用寿命。 二、轴设计1. 轴的分类方式:依据轴在机械装置中的功能定位与受力特点,可将轴划分为心轴、转轴以及传动轴等类型。 2. 轴的材料选择:通常采用钢材作为轴的材料,例如碳素结构钢或合金结构钢,特殊需求时可选用不锈钢材料或轻质合金材料。 3. 轴的构造规划:需详细考虑轴的轴向长度、截面直径、键槽布置、轴承安装位置等要素,以满足轴的强度要求、刚度要求以及稳定性要求。 4. 轴的强度验证:需进行轴的扭转强度分析与弯曲强度分析,以防止轴在运行过程中发生塑性变形...
源码地址: https://pan.quark.cn/s/0da0857cafe8 GreenDao是一个专为Android系统设计的轻量级对象关系映射(ORM)工具,其核心功能在于将数据库交互转化为Java对象的形式,以此减轻数据存储任务的处理负担。 GreenDao 2.0.0是该框架的一个迭代升级版本,其优势在于提供了更为高效和稳定的数据管理机制。 在Android软件构建过程中,数据持久化被视为一个关键环节,而SQLite数据库是常见的实现手段。 然而,直接运用SQLite数据库的SQL指令往往会导致代码结构复杂化,从而降低可维护性。 正是由于这类挑战的存在,ORM框架如GreenDao应运而生,它通过将数据库表与Java类进行映射关联,使得开发者能够借助简化的对象操作完成数据库任务,显著提升了开发效能。 GreenDao 2.0.0版本的突出特性涵盖:1. 性能增强:此版本或许包含了针对查询速率、内存使用以及整体效能的优化措施,从而在处理海量数据时展现出更高的工作效率。 2. 更优的API布局:可能引入了新的应用程序接口或改进了既有API的使用体验,让开发人员能更便捷地执行插入、更新、删除及查询等操作。 3. 兼容性增强:可能加强了针对不同Android系统版本和硬件设备的适配能力,减少了兼容性问题的发生几率。 4. 缺陷修正:该版本或许修复了前一个版本中存在的一些已知缺陷,进一步巩固了框架的可靠性。 5. 文档补充:与新版本同步发布的可能包含详尽的更新记录和改进说明,旨在协助开发者掌握如何利用新增功能。 运用GreenDao的常规流程通常包括:1. 引入依赖:在项目中导入GreenDao的jar文件,对于2.0.0版本,需将下载的jar文件放置到项目的libs文件夹,...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值