android--超级手电筒的开发记录

作为新手,我认为做小东西是学习一门语言最快的方法,目前在跟着教程制作超级手电筒,每天记录一些,直到做完这个手电筒

主要思路

关于手电筒,两个imageview带有相应的开关图片,一个空白的imageview作为热区,代码控制其大小,用来让用户点击

框架布局—上下依次继承关系
BaseActivety 主文件,初始化一些按键
FlashLight 控制手电筒的java类
mainActivity 暂时未用到

下面学习到的一些操作记录

获取屏幕大小,并动态设置imageview的大小

        /* * 下面手动获取屏幕尺寸,调节热区大小 */
        Point point = new Point();
        getWindowManager().getDefaultDisplay().getSize(point);
        LayoutParams Params = flashlightcontroller.getLayoutParams();
        Params.height = point.y*3/4;
        Params.width = point.x/3;
        flashlightcontroller.setLayoutParams(Params);
    }

在一个activity_main.xml文件引用其他的xml文件

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

空白热区的建立

<!-- 空白的热区建立,在最底层,中间,并且添加点击事件 -->
        <ImageView  android:id="@+id/imageView_flashlight_controller" android:layout_width="100dp" android:layout_height="320dp" android:layout_gravity="bottom|center_horizontal" android:onClick="onclick_flashlight"/>

styles.xml文件样式的设置

<!-- 不同的values文件夹对应安卓不同版本的styles. -->
<!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme"> <item name ="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowBackground">@drawable/bg</item> </style>

设置软件使用照相机闪光灯快捷方式权限

<!-- 这里设置使用照相机和闪光灯的权限 -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.FLASHLIGHT"/>

    <!-- 这里设置使用快捷方式创建的权限 -->
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>

闪光灯开启

/* * 控制闪光灯的开 */
    protected void startflashlight() {
        //使用transitiondrawable来控制动画,也就是flashlight.xml这个文件
        TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable(); 
        //控制转变时间200毫秒
        drawable.startTransition(200);
        //设置标识,如果被打开,则tag为true
        flashlight.setTag(true);
        /* * 下面开始打开照相机,然后处理图像到后台,然后设置闪光灯打开 */
        try {
            /* * camera和其组件之间的交流,通过参数parmeters来进行关联,camera可以获取当前的状态参数 * 再通过setparameters来进行设置新的参数 */
            mcamera = Camera.open();//打开照相机
            int texttrueid = 0;
            //?暂时不知道是啥
            mcamera.setPreviewTexture(new SurfaceTexture(texttrueid));
            mcamera.startPreview();

            mparaters = mcamera.getParameters();
            //设置打开闪光的,并点亮
            mparaters.setFlashMode(Parameters.FLASH_MODE_TORCH);
            mcamera.setParameters(mparaters);
        } catch (Exception e) {

        }
    }

闪光灯关闭

/* * 控制闪光的的关闭 */
    protected void stopflashlight() {
        TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable();
        if((Boolean) flashlight.getTag()){
            drawable.reverseTransition(200);
            flashlight.setTag(false);
            if(mcamera != null){
                mparaters = mcamera.getParameters();
                mparaters.setFlashMode(Parameters.FLASH_MODE_OFF);
                mcamera.setParameters(mparaters);
                mcamera.stopPreview();//停止预览
                mcamera.release();//释放掉资源,不然下次打不开
                mcamera = null;//设置为null为了垃圾回收机制尽快回收
            }
        }
    }
    /* * 当程序失去焦点的时候自动暂停闪光的 */
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        stopflashlight();
    }

利用xml文件设置imageview切换动画

<?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>

关于xml中onclick的注意事项

这样定义

<ImageView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_weight="1" android:onClick="onclick_toflashlight" android:src="@drawable/main_flashlight" />

这样使用

/* * 点击手电筒图片实现的方法 * view不能省略,第二类要是public类型 */
    public void onclick_toflashlight(View view) {
        Uihideall();
        ui_flashlight.setVisibility(View.VISIBLE);
        currentUItype = UIType.UI_TYPE_FLASHLIGHT;
        previousUItype = UIType.UI_TYPE_FLASHLIGHT;
    }

枚举类型可用来表示当前状态,当有多个功能的时候

    protected enum UIType {
        UI_TYPE_MAIN, UI_TYPE_FLASHLIGHT, UI_TYPE_WARNINGLIGHT, UI_TYPE_MORSE, UI_TYPE_BLUB, UI_TYPE_COLOR, UI_TYPE_POLICE, UI_TYPE_SETTINGS
    }

你可能感兴趣的:(android,开发)