作为新手,我认为做小东西是学习一门语言最快的方法,目前在跟着教程制作超级手电筒,每天记录一些,直到做完这个手电筒
关于手电筒,两个imageview带有相应的开关图片,一个空白的imageview作为热区,代码控制其大小,用来让用户点击
框架布局—上下依次继承关系
BaseActivety 主文件,初始化一些按键
FlashLight 控制手电筒的java类
mainActivity 暂时未用到
下面学习到的一些操作记录
/* * 下面手动获取屏幕尺寸,调节热区大小 */
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);
}
<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"/>
<!-- 不同的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 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>
这样定义
<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
}