作为新手,我认为做小东西是学习一门语言最快的方法,目前在跟着教程制作超级手电筒,每天记录一些,直到做完这个手电筒
主要思路
关于手电筒,两个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
}
版权声明:本文为博主原创文章,未经博主允许不得转载。