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

本课时介绍超级手电筒的程序架构以及热点区域的布局。

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

第一程序的架构:

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


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

第一步: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();
}
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值