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文件样式的设置



    <style name="AppTheme" parent="AppBaseTheme">
        <item name ="android:windowNoTitle">trueitem>
        <item name="android:windowFullscreen">trueitem>
        <item name="android:windowBackground">@drawable/bg     
    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切换动画


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

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/-niuli/p/4856447.html

你可能感兴趣的:(移动开发)