您的位置:首页 > 运维架构 > 网站架构

超级手电筒的项目架构和布局第三课时

2015-09-07 11:15 447 查看
本课时介绍超级手电筒的程序架构以及热点区域的布局。

先写架构:图片布局的架构和程序的架构

第一程序的架构:

就是我要知道,我的程序是怎样的一种架构,什么样的代码放在怎样的地方。让写的代码易于扩张,易于重构,已于重用。

这个用于写一些通用的方法,让他的子类复用,该类中的方法和变量

第一步:BaseActivity
extends Activity:

public class BaseActivity extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}

第二步:FlashLight
extends BaseActivity:

public class FlashLight extends BaseActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

}

第三步:MainActivity
extends FlashLight:

public class MainActivity extends FlashLight {

}

总结:通过上面的extends,能达到一种链表的构架。由此看出链表并不是一个具体的事物,而是一种抽象的东西。只要符合,链式的这种的结构,我们都可以称之为链表。能把这种概念抽象到一定的高度,并且符合一切能符合的事物,便是一种智慧。这几个类以extends的形式进行联系。他们都是activity,在方法调用的时候,自顶向下的调用的顺序,依次调用activity的onCreate,但是activity的生命周期的方法不一定是按一定的顺序(可以写一写extends相联系的activity,测试一下),这个用到在深究。

第二UI的架构:ui_flashlight.xml

第一层:开和关状态的图片(两张图片)

因为这两张图片必须是相互切换的,为了达到这种效果,就放在一个xml文件中。

drawable:由此看出在这个资源中,不仅可以放置一些xml文件,实现一些特定的效果。

flashlight.xml:

<?xml
version="1.0" encoding="utf-8"?>

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

<!-- 默认显示第一个图片 -->

<item android:drawable="@drawable/off" />

<item android:drawable="@drawable/on" />

</transition>

ui_flashlight.xml:

<?xml
version="1.0" encoding="utf-8"?>

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

android:id="@+id/framelayout_flashlight"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<!-- 将两个开和关状态的图片放在能相互切换的transition的标签中

之后以imageview的标签引入

-->

<ImageView

android:id="@+id/imageview_flashlight"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:src="@drawable/flashlight"

/>

</FrameLayout>

第二层:热区(透明的)

<!--
这个放置热区,整体叠加存放 -->

<ImageView

android:id="@+id/imageview_controller"

android:layout_width="80dp"

android:layout_height="490dp"

android:layout_gravity="bottom|center_horizontal"

android:onClick="onClick_flashlight"

/>

总的布局:

<?xml
version="1.0" encoding="utf-8"?>

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

android:id="@+id/framelayout_flashlight"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<!-- 将两个开和关状态的图片放在能相互切换的transition的标签中

之后以imageview的标签引入

-->

<ImageView

android:id="@+id/imageview_flashlight"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:src="@drawable/flashlight"

/>

<!-- 这个放置热区,整体叠加存放 -->

<ImageView

android:id="@+id/imageview_controller"

android:layout_width="80dp"

android:layout_height="490dp"

android:layout_gravity="bottom|center_horizontal"

android:onClick="onClick_flashlight"



/>

</FrameLayout>

activity_main.xml:

在这个总的布局,将ui_flashlight.xml引入即可

<!-- 将表示手电筒开关的两张图片引入进来 -->

<include layout="@layout/ui_flashlight"/>

基类代码:

BaseActivity
extends Activity:

package com.example.mylight;

import android.app.Activity;

import android.hardware.Camera;

注意这个是导入的这个

import android.hardware.Camera.Parameters;

import android.os.Bundle;

import android.widget.ImageView;

public class BaseActivity extends Activity{

//protected的属性 让子类使用

//开和关状态的图片

protected ImageView mImageViewFlashlight;

//热区

protected ImageView mImageViewFlashlightController;

//用于开通闪光灯的

protected Camera mCamera;

protected Parameters mParameters;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mImageViewFlashlight=(ImageView) findViewById(R.id.imageview_flashlight);

mImageViewFlashlightController=(ImageView) findViewById(R.id.imageview_controller);

}

}



FlashLight
extends BaseActivity:

知识的缺失:是有关闪光灯的开启和关闭

package com.example.mylight;

import android.graphics.Point;

import android.graphics.SurfaceTexture;

import android.graphics.drawable.TransitionDrawable;

import android.hardware.Camera;

import android.hardware.Camera.Parameters;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup.LayoutParams;

public class FlashLight extends BaseActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mImageViewFlashlight.setTag(false);

Point point=new Point();

//获得屏幕的尺寸

getWindowManager().getDefaultDisplay().getSize(point);

LayoutParams layoutParams=(LayoutParams) mImageViewFlashlightController.getLayoutParams();

layoutParams.height=point.y*3/4;

layoutParams.width=point.x/3;

mImageViewFlashlightController.setLayoutParams(layoutParams);

}

//onClick_flashlight为他设置单击事件

public void onClick_flashlight(View view){

// if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){

// Toast.makeText(this,"该设备有闪光灯", Toast.LENGTH_LONG).show();

// return;

// }

if((Boolean) mImageViewFlashlight.getTag()==false){

openFlashlight();

}

else{

CloseFlashLight();

}

}

//打开闪光灯

protected void openFlashlight(){

//先得到存放开关图片的,那两个文件。

TransitionDrawable drawable=(TransitionDrawable) mImageViewFlashlight.getDrawable();

//经过一个时间就进行图片的切换。

drawable.startTransition(200);

//tag标志,标志闪光灯的开关

mImageViewFlashlight.setTag(true);

try {

//打开摄像头,闪光灯和摄像头是一体的。

mCamera=Camera.open();

//为mCamera设置一些属性

int textureId=0;

mCamera.setPreviewTexture(new SurfaceTexture(textureId));

mCamera.startPreview();

mParameters=mCamera.getParameters();

mParameters.setFlashMode(mParameters.FLASH_MODE_TORCH);

mCamera.setParameters(mParameters);

} catch (Exception e) {

// TODO: handle exception

}

}

//关闭闪光灯

public void CloseFlashLight(){

TransitionDrawable drawable=(TransitionDrawable) mImageViewFlashlight.getDrawable();

if((Boolean) mImageViewFlashlight.getTag()){

//图片的切换

drawable.reverseTransition(200);

mImageViewFlashlight.setTag(false);

if(mCamera!=null){

mParameters=mCamera.getParameters();

mParameters.setFlashMode(Parameters.FLASH_MODE_OFF);

mCamera.setParameters(mParameters);

mCamera.stopPreview();

//释放资源

mCamera.release();

mCamera=null;

}

}

}

//当退出这个程序,关闭闪光灯

@Override

protected void onPause() {

super.onPause();

CloseFlashLight();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: