diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b88656 --- /dev/null +++ b/.gitignore @@ -0,0 +1,246 @@ +################# +## Eclipse +################# + +gridlayout/gridlayout.iml +build.gradle +.gradle +.idea +gradle +library/.settings +library/assets +library/bin +library/build +library/gen +library/library.iml + +*.pydevproject +.metadata +bin/* +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath +gen/ + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml +*.publishproj + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[cod] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +#忽略工程配置文件 + +*.properties +*.R +gradlew +.project +build.gradle +gradlew.bat +project.properties +settings.gradle +.classpath +*.iml +*.gradle +Camera/bin/* +CameraLibrary\bin + + diff --git a/Camera/bin/Camera.apk b/Camera/bin/Camera.apk index 8ab857d..bcae686 100644 Binary files a/Camera/bin/Camera.apk and b/Camera/bin/Camera.apk differ diff --git a/Camera/bin/R.txt b/Camera/bin/R.txt index 6bce16a..6496878 100644 --- a/Camera/bin/R.txt +++ b/Camera/bin/R.txt @@ -37,85 +37,85 @@ int drawable btn_flash_auto 0x7f020008 int drawable btn_flash_off 0x7f020009 int drawable btn_flash_on 0x7f02000a int drawable btn_flash_torch 0x7f02000b -int drawable btn_photopage_top_bar_selector 0x7f02000c -int drawable btn_play_vedio 0x7f02000d -int drawable btn_play_vedio_b 0x7f02000e -int drawable btn_shutter_camera 0x7f02000f -int drawable btn_shutter_record 0x7f020010 -int drawable btn_shutter_recording 0x7f020011 -int drawable btn_shutter_video 0x7f020012 -int drawable btn_shutter_video_click 0x7f020013 -int drawable btn_stop_red 0x7f020014 -int drawable btn_stop_red_click 0x7f020015 -int drawable color_white_yellow 0x7f020016 -int drawable focus_focus_failed 0x7f020017 -int drawable focus_focused 0x7f020018 -int drawable focus_focusing 0x7f020019 -int drawable gg_ic_video_play 0x7f02001a -int drawable gg_ic_video_play_on 0x7f02001b -int drawable have_new_effect_flag 0x7f02001c -int drawable ic_camera_top_bar_flash_auto_click 0x7f02001d -int drawable ic_camera_top_bar_flash_auto_normal 0x7f02001e -int drawable ic_camera_top_bar_flash_off_click 0x7f02001f -int drawable ic_camera_top_bar_flash_off_normal 0x7f020020 -int drawable ic_camera_top_bar_flash_on_click 0x7f020021 -int drawable ic_camera_top_bar_flash_on_normal 0x7f020022 -int drawable ic_camera_top_bar_flash_torch_click 0x7f020023 -int drawable ic_camera_top_bar_flash_torch_normal 0x7f020024 -int drawable ic_camera_top_bar_my_center 0x7f020025 -int drawable ic_camera_top_bar_my_center_normal 0x7f020026 -int drawable ic_camera_top_bar_my_center_pressed 0x7f020027 -int drawable ic_camera_top_bar_setting 0x7f020028 -int drawable ic_camera_top_bar_setting_click 0x7f020029 -int drawable ic_camera_top_bar_setting_normal 0x7f02002a -int drawable ic_camera_top_bar_sw_camera 0x7f02002b -int drawable ic_camera_top_bar_sw_camera_click 0x7f02002c -int drawable ic_camera_top_bar_sw_camera_normal 0x7f02002d -int drawable ic_error 0x7f02002e -int drawable ic_launcher 0x7f02002f -int drawable ic_stub 0x7f020030 -int drawable ic_switch_camera 0x7f020031 -int drawable ic_switch_video 0x7f020032 -int drawable ic_switcher_menu_indicator 0x7f020033 -int drawable icon_back02 0x7f020034 -int drawable icon_back02_click 0x7f020035 -int drawable icon_back2 0x7f020036 -int drawable icon_back2_click 0x7f020037 -int drawable icon_rec 0x7f020038 -int drawable picture_setting_album_checkbox 0x7f020039 -int drawable progressbar_bg 0x7f02003a -int drawable progressbar_thumb_record_mix 0x7f02003b -int drawable thumb_guide_tips_new 0x7f02003c -int drawable thumbnail_bg 0x7f02003d -int drawable title_text_selector 0x7f02003e -int drawable video_detail_player_pause 0x7f02003f -int drawable video_detail_player_start 0x7f020040 -int drawable video_detail_player_top_bg 0x7f020041 -int drawable video_pause_bg 0x7f020042 -int drawable video_player_bg 0x7f020043 +int drawable btn_img_camera 0x7f02000c +int drawable btn_photopage_top_bar_selector 0x7f02000d +int drawable btn_play_vedio 0x7f02000e +int drawable btn_play_vedio_b 0x7f02000f +int drawable btn_shutter_camera 0x7f020010 +int drawable btn_shutter_record 0x7f020011 +int drawable btn_shutter_recording 0x7f020012 +int drawable btn_shutter_video 0x7f020013 +int drawable btn_shutter_video_click 0x7f020014 +int drawable btn_stop_red 0x7f020015 +int drawable btn_stop_red_click 0x7f020016 +int drawable color_white_yellow 0x7f020017 +int drawable focus_focus_failed 0x7f020018 +int drawable focus_focused 0x7f020019 +int drawable focus_focusing 0x7f02001a +int drawable gg_ic_video_play 0x7f02001b +int drawable gg_ic_video_play_on 0x7f02001c +int drawable have_new_effect_flag 0x7f02001d +int drawable ic_camera_top_bar_flash_auto_click 0x7f02001e +int drawable ic_camera_top_bar_flash_auto_normal 0x7f02001f +int drawable ic_camera_top_bar_flash_off_click 0x7f020020 +int drawable ic_camera_top_bar_flash_off_normal 0x7f020021 +int drawable ic_camera_top_bar_flash_on_click 0x7f020022 +int drawable ic_camera_top_bar_flash_on_normal 0x7f020023 +int drawable ic_camera_top_bar_flash_torch_click 0x7f020024 +int drawable ic_camera_top_bar_flash_torch_normal 0x7f020025 +int drawable ic_camera_top_bar_my_center 0x7f020026 +int drawable ic_camera_top_bar_my_center_normal 0x7f020027 +int drawable ic_camera_top_bar_my_center_pressed 0x7f020028 +int drawable ic_camera_top_bar_setting 0x7f020029 +int drawable ic_camera_top_bar_setting_click 0x7f02002a +int drawable ic_camera_top_bar_setting_normal 0x7f02002b +int drawable ic_camera_top_bar_sw_camera 0x7f02002c +int drawable ic_camera_top_bar_sw_camera_click 0x7f02002d +int drawable ic_camera_top_bar_sw_camera_normal 0x7f02002e +int drawable ic_error 0x7f02002f +int drawable ic_launcher 0x7f020030 +int drawable ic_stub 0x7f020031 +int drawable ic_switch_camera 0x7f020032 +int drawable ic_switch_video 0x7f020033 +int drawable ic_switcher_menu_indicator 0x7f020034 +int drawable icon_back02 0x7f020035 +int drawable icon_back02_click 0x7f020036 +int drawable icon_back2 0x7f020037 +int drawable icon_back2_click 0x7f020038 +int drawable icon_rec 0x7f020039 +int drawable picture_setting_album_checkbox 0x7f02003a +int drawable progressbar_bg 0x7f02003b +int drawable progressbar_thumb_record_mix 0x7f02003c +int drawable thumb_guide_tips_new 0x7f02003d +int drawable thumbnail_bg 0x7f02003e +int drawable title_text_selector 0x7f02003f +int drawable video_detail_player_pause 0x7f020040 +int drawable video_detail_player_start 0x7f020041 +int drawable video_detail_player_top_bg 0x7f020042 +int drawable video_pause_bg 0x7f020043 +int drawable video_player_bg 0x7f020044 int id FrameLayout1 0x7f0a0000 -int id action_settings 0x7f0a0032 +int id action_settings 0x7f0a0031 int id album_bottom_bar 0x7f0a0002 int id album_item_bottom_bar 0x7f0a0015 int id album_item_header_bar 0x7f0a0014 int id albumview 0x7f0a0001 int id albumviewpager 0x7f0a0013 -int id btnVideoPlayOrPause 0x7f0a002e -int id btn_flash_mode 0x7f0a0020 -int id btn_other_setting 0x7f0a0021 -int id btn_shutter_camera 0x7f0a001d -int id btn_shutter_record 0x7f0a001c -int id btn_switch_camera 0x7f0a001f -int id btn_switch_mode 0x7f0a001e +int id btnVideoPlayOrPause 0x7f0a002d +int id btn_flash_mode 0x7f0a001f +int id btn_other_setting 0x7f0a0020 +int id btn_shutter_camera 0x7f0a001c +int id btn_switch_camera 0x7f0a001e +int id btn_switch_mode 0x7f0a001d int id btn_thumbnail 0x7f0a001a -int id cameraView 0x7f0a0022 +int id cameraView 0x7f0a0021 int id camera_bottom_bar 0x7f0a0018 int id camera_header_bar 0x7f0a0019 -int id checkbox 0x7f0a0029 +int id checkbox 0x7f0a0028 int id container 0x7f0a0017 int id delete 0x7f0a0004 int id edit 0x7f0a000d -int id focusImageView 0x7f0a0024 +int id focusImageView 0x7f0a0023 int id header_bar_album_title 0x7f0a0007 int id header_bar_back 0x7f0a0006 int id header_bar_enter_selection 0x7f0a0008 @@ -127,23 +127,23 @@ int id header_bar_photo_count 0x7f0a0010 int id header_bar_photo_to_camera 0x7f0a0011 int id header_bar_select 0x7f0a0009 int id header_bar_select_counter 0x7f0a000b -int id image 0x7f0a002a -int id imgThumbnail 0x7f0a0028 -int id llVideoDetailPlayerBottom 0x7f0a002d -int id loading 0x7f0a002b +int id image 0x7f0a0029 +int id imgThumbnail 0x7f0a0027 +int id llVideoDetailPlayerBottom 0x7f0a002c +int id loading 0x7f0a002a int id move 0x7f0a0003 int id pagerview 0x7f0a0012 -int id recordInfo 0x7f0a0025 -int id sbVideoDetailPlayer 0x7f0a0031 +int id recordInfo 0x7f0a0024 +int id sbVideoDetailPlayer 0x7f0a0030 int id select_all 0x7f0a000c -int id tempImageView 0x7f0a0023 -int id tvVideoPlayRemainTime 0x7f0a0030 -int id tvVideoPlayTime 0x7f0a002f -int id videoPlayerView 0x7f0a002c +int id tempImageView 0x7f0a0022 +int id tvVideoPlayRemainTime 0x7f0a002f +int id tvVideoPlayTime 0x7f0a002e +int id videoPlayerView 0x7f0a002b int id videoicon 0x7f0a001b int id videoview 0x7f0a0016 -int id waterMark 0x7f0a0026 -int id zoomSeekBar 0x7f0a0027 +int id waterMark 0x7f0a0025 +int id zoomSeekBar 0x7f0a0026 int layout activity_main 0x7f030000 int layout album 0x7f030001 int layout album_bottom_bar 0x7f030002 diff --git a/Camera/bin/classes.dex b/Camera/bin/classes.dex index 0dac600..914aff5 100644 Binary files a/Camera/bin/classes.dex and b/Camera/bin/classes.dex differ diff --git a/Camera/bin/classes/com/example/camera/AlbumAty$1.class b/Camera/bin/classes/com/example/camera/AlbumAty$1.class index 2591f9f..5adabb1 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumAty$1.class and b/Camera/bin/classes/com/example/camera/AlbumAty$1.class differ diff --git a/Camera/bin/classes/com/example/camera/AlbumAty$2.class b/Camera/bin/classes/com/example/camera/AlbumAty$2.class index 4edc7d3..5e186a8 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumAty$2.class and b/Camera/bin/classes/com/example/camera/AlbumAty$2.class differ diff --git a/Camera/bin/classes/com/example/camera/AlbumAty$3.class b/Camera/bin/classes/com/example/camera/AlbumAty$3.class index 923c461..0f6104f 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumAty$3.class and b/Camera/bin/classes/com/example/camera/AlbumAty$3.class differ diff --git a/Camera/bin/classes/com/example/camera/AlbumAty$4.class b/Camera/bin/classes/com/example/camera/AlbumAty$4.class index 4622ea2..63c3687 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumAty$4.class and b/Camera/bin/classes/com/example/camera/AlbumAty$4.class differ diff --git a/Camera/bin/classes/com/example/camera/AlbumAty.class b/Camera/bin/classes/com/example/camera/AlbumAty.class index d30aa79..fd6becf 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumAty.class and b/Camera/bin/classes/com/example/camera/AlbumAty.class differ diff --git a/Camera/bin/classes/com/example/camera/AlbumItemAty$1.class b/Camera/bin/classes/com/example/camera/AlbumItemAty$1.class index f6928a1..eeb77d4 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumItemAty$1.class and b/Camera/bin/classes/com/example/camera/AlbumItemAty$1.class differ diff --git a/Camera/bin/classes/com/example/camera/AlbumItemAty.class b/Camera/bin/classes/com/example/camera/AlbumItemAty.class index e60ba12..0ed733c 100644 Binary files a/Camera/bin/classes/com/example/camera/AlbumItemAty.class and b/Camera/bin/classes/com/example/camera/AlbumItemAty.class differ diff --git a/Camera/bin/classes/com/example/camera/BuildConfig.class b/Camera/bin/classes/com/example/camera/BuildConfig.class index db7a2cb..503ccb2 100644 Binary files a/Camera/bin/classes/com/example/camera/BuildConfig.class and b/Camera/bin/classes/com/example/camera/BuildConfig.class differ diff --git a/Camera/bin/classes/com/example/camera/CameraAty.class b/Camera/bin/classes/com/example/camera/CameraAty.class index 1ce1827..8b59229 100644 Binary files a/Camera/bin/classes/com/example/camera/CameraAty.class and b/Camera/bin/classes/com/example/camera/CameraAty.class differ diff --git a/Camera/bin/classes/com/example/camera/R$anim.class b/Camera/bin/classes/com/example/camera/R$anim.class index 6cb5c48..0eb2521 100644 Binary files a/Camera/bin/classes/com/example/camera/R$anim.class and b/Camera/bin/classes/com/example/camera/R$anim.class differ diff --git a/Camera/bin/classes/com/example/camera/R$attr.class b/Camera/bin/classes/com/example/camera/R$attr.class index d47b596..a542654 100644 Binary files a/Camera/bin/classes/com/example/camera/R$attr.class and b/Camera/bin/classes/com/example/camera/R$attr.class differ diff --git a/Camera/bin/classes/com/example/camera/R$color.class b/Camera/bin/classes/com/example/camera/R$color.class index e8fc284..fbbf148 100644 Binary files a/Camera/bin/classes/com/example/camera/R$color.class and b/Camera/bin/classes/com/example/camera/R$color.class differ diff --git a/Camera/bin/classes/com/example/camera/R$dimen.class b/Camera/bin/classes/com/example/camera/R$dimen.class index acc49fe..c8adf23 100644 Binary files a/Camera/bin/classes/com/example/camera/R$dimen.class and b/Camera/bin/classes/com/example/camera/R$dimen.class differ diff --git a/Camera/bin/classes/com/example/camera/R$drawable.class b/Camera/bin/classes/com/example/camera/R$drawable.class index 12e7d9c..9ba75cb 100644 Binary files a/Camera/bin/classes/com/example/camera/R$drawable.class and b/Camera/bin/classes/com/example/camera/R$drawable.class differ diff --git a/Camera/bin/classes/com/example/camera/R$id.class b/Camera/bin/classes/com/example/camera/R$id.class index 369a274..527fa23 100644 Binary files a/Camera/bin/classes/com/example/camera/R$id.class and b/Camera/bin/classes/com/example/camera/R$id.class differ diff --git a/Camera/bin/classes/com/example/camera/R$layout.class b/Camera/bin/classes/com/example/camera/R$layout.class index f5d0c13..a933e83 100644 Binary files a/Camera/bin/classes/com/example/camera/R$layout.class and b/Camera/bin/classes/com/example/camera/R$layout.class differ diff --git a/Camera/bin/classes/com/example/camera/R$menu.class b/Camera/bin/classes/com/example/camera/R$menu.class index ead947f..248615f 100644 Binary files a/Camera/bin/classes/com/example/camera/R$menu.class and b/Camera/bin/classes/com/example/camera/R$menu.class differ diff --git a/Camera/bin/classes/com/example/camera/R$string.class b/Camera/bin/classes/com/example/camera/R$string.class index d6b1553..8c7b90d 100644 Binary files a/Camera/bin/classes/com/example/camera/R$string.class and b/Camera/bin/classes/com/example/camera/R$string.class differ diff --git a/Camera/bin/classes/com/example/camera/R$style.class b/Camera/bin/classes/com/example/camera/R$style.class index ebd9379..534d2cb 100644 Binary files a/Camera/bin/classes/com/example/camera/R$style.class and b/Camera/bin/classes/com/example/camera/R$style.class differ diff --git a/Camera/bin/classes/com/example/camera/R$styleable.class b/Camera/bin/classes/com/example/camera/R$styleable.class index 580510a..ce2f69f 100644 Binary files a/Camera/bin/classes/com/example/camera/R$styleable.class and b/Camera/bin/classes/com/example/camera/R$styleable.class differ diff --git a/Camera/bin/classes/com/example/camera/R.class b/Camera/bin/classes/com/example/camera/R.class index de0eb3f..bab681f 100644 Binary files a/Camera/bin/classes/com/example/camera/R.class and b/Camera/bin/classes/com/example/camera/R.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$anim.class b/Camera/bin/classes/com/linj/cameralibrary/R$anim.class index 88337e1..1c758c5 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$anim.class and b/Camera/bin/classes/com/linj/cameralibrary/R$anim.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$attr.class b/Camera/bin/classes/com/linj/cameralibrary/R$attr.class index 22fc125..c9688de 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$attr.class and b/Camera/bin/classes/com/linj/cameralibrary/R$attr.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$color.class b/Camera/bin/classes/com/linj/cameralibrary/R$color.class index 8b5b585..87f7cd8 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$color.class and b/Camera/bin/classes/com/linj/cameralibrary/R$color.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$dimen.class b/Camera/bin/classes/com/linj/cameralibrary/R$dimen.class index fe01788..0757764 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$dimen.class and b/Camera/bin/classes/com/linj/cameralibrary/R$dimen.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$drawable.class b/Camera/bin/classes/com/linj/cameralibrary/R$drawable.class index 3cf0412..0aac269 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$drawable.class and b/Camera/bin/classes/com/linj/cameralibrary/R$drawable.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$id.class b/Camera/bin/classes/com/linj/cameralibrary/R$id.class index 1921397..f80c12f 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$id.class and b/Camera/bin/classes/com/linj/cameralibrary/R$id.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$layout.class b/Camera/bin/classes/com/linj/cameralibrary/R$layout.class index 894ad64..37487ef 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$layout.class and b/Camera/bin/classes/com/linj/cameralibrary/R$layout.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$menu.class b/Camera/bin/classes/com/linj/cameralibrary/R$menu.class index c9efc76..06b6b80 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$menu.class and b/Camera/bin/classes/com/linj/cameralibrary/R$menu.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$string.class b/Camera/bin/classes/com/linj/cameralibrary/R$string.class index 9465bf7..96ba57f 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$string.class and b/Camera/bin/classes/com/linj/cameralibrary/R$string.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$style.class b/Camera/bin/classes/com/linj/cameralibrary/R$style.class index 7e802e0..07fe673 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$style.class and b/Camera/bin/classes/com/linj/cameralibrary/R$style.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R$styleable.class b/Camera/bin/classes/com/linj/cameralibrary/R$styleable.class index eabb037..58b964d 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R$styleable.class and b/Camera/bin/classes/com/linj/cameralibrary/R$styleable.class differ diff --git a/Camera/bin/classes/com/linj/cameralibrary/R.class b/Camera/bin/classes/com/linj/cameralibrary/R.class index 34f02b9..9628f03 100644 Binary files a/Camera/bin/classes/com/linj/cameralibrary/R.class and b/Camera/bin/classes/com/linj/cameralibrary/R.class differ diff --git a/Camera/bin/dexedLibs/android-support-v4-3d36a11bbe54bdd1474cc6a8fc758588.jar b/Camera/bin/dexedLibs/android-support-v4-3d36a11bbe54bdd1474cc6a8fc758588.jar deleted file mode 100644 index eff5ee0..0000000 Binary files a/Camera/bin/dexedLibs/android-support-v4-3d36a11bbe54bdd1474cc6a8fc758588.jar and /dev/null differ diff --git a/Camera/bin/dexedLibs/cameralibrary-dd3151f81d0b333d604fb80982df9ab0.jar b/Camera/bin/dexedLibs/cameralibrary-dd3151f81d0b333d604fb80982df9ab0.jar deleted file mode 100644 index 84db372..0000000 Binary files a/Camera/bin/dexedLibs/cameralibrary-dd3151f81d0b333d604fb80982df9ab0.jar and /dev/null differ diff --git a/Camera/bin/res/crunch/drawable-hdpi/video_detail_player_top_bg.9.png b/Camera/bin/res/crunch/drawable-hdpi/video_detail_player_top_bg.9.png index ac97833..f5eb15a 100644 Binary files a/Camera/bin/res/crunch/drawable-hdpi/video_detail_player_top_bg.9.png and b/Camera/bin/res/crunch/drawable-hdpi/video_detail_player_top_bg.9.png differ diff --git a/Camera/bin/resources.ap_ b/Camera/bin/resources.ap_ deleted file mode 100644 index 3f622a1..0000000 Binary files a/Camera/bin/resources.ap_ and /dev/null differ diff --git a/Camera/gen/com/example/camera/R.java b/Camera/gen/com/example/camera/R.java index ae105a0..4a89c3e 100644 --- a/Camera/gen/com/example/camera/R.java +++ b/Camera/gen/com/example/camera/R.java @@ -95,87 +95,87 @@ public static final class drawable { public static final int btn_flash_off=0x7f020009; public static final int btn_flash_on=0x7f02000a; public static final int btn_flash_torch=0x7f02000b; - public static final int btn_photopage_top_bar_selector=0x7f02000c; - public static final int btn_play_vedio=0x7f02000d; - public static final int btn_play_vedio_b=0x7f02000e; - public static final int btn_shutter_camera=0x7f02000f; - public static final int btn_shutter_record=0x7f020010; - public static final int btn_shutter_recording=0x7f020011; - public static final int btn_shutter_video=0x7f020012; - public static final int btn_shutter_video_click=0x7f020013; - public static final int btn_stop_red=0x7f020014; - public static final int btn_stop_red_click=0x7f020015; - public static final int color_white_yellow=0x7f020016; - public static final int focus_focus_failed=0x7f020017; - public static final int focus_focused=0x7f020018; - public static final int focus_focusing=0x7f020019; - public static final int gg_ic_video_play=0x7f02001a; - public static final int gg_ic_video_play_on=0x7f02001b; - public static final int have_new_effect_flag=0x7f02001c; - public static final int ic_camera_top_bar_flash_auto_click=0x7f02001d; - public static final int ic_camera_top_bar_flash_auto_normal=0x7f02001e; - public static final int ic_camera_top_bar_flash_off_click=0x7f02001f; - public static final int ic_camera_top_bar_flash_off_normal=0x7f020020; - public static final int ic_camera_top_bar_flash_on_click=0x7f020021; - public static final int ic_camera_top_bar_flash_on_normal=0x7f020022; - public static final int ic_camera_top_bar_flash_torch_click=0x7f020023; - public static final int ic_camera_top_bar_flash_torch_normal=0x7f020024; - public static final int ic_camera_top_bar_my_center=0x7f020025; - public static final int ic_camera_top_bar_my_center_normal=0x7f020026; - public static final int ic_camera_top_bar_my_center_pressed=0x7f020027; - public static final int ic_camera_top_bar_setting=0x7f020028; - public static final int ic_camera_top_bar_setting_click=0x7f020029; - public static final int ic_camera_top_bar_setting_normal=0x7f02002a; - public static final int ic_camera_top_bar_sw_camera=0x7f02002b; - public static final int ic_camera_top_bar_sw_camera_click=0x7f02002c; - public static final int ic_camera_top_bar_sw_camera_normal=0x7f02002d; - public static final int ic_error=0x7f02002e; - public static final int ic_launcher=0x7f02002f; - public static final int ic_stub=0x7f020030; - public static final int ic_switch_camera=0x7f020031; - public static final int ic_switch_video=0x7f020032; - public static final int ic_switcher_menu_indicator=0x7f020033; - public static final int icon_back02=0x7f020034; - public static final int icon_back02_click=0x7f020035; - public static final int icon_back2=0x7f020036; - public static final int icon_back2_click=0x7f020037; - public static final int icon_rec=0x7f020038; - public static final int picture_setting_album_checkbox=0x7f020039; - public static final int progressbar_bg=0x7f02003a; - public static final int progressbar_thumb_record_mix=0x7f02003b; - public static final int thumb_guide_tips_new=0x7f02003c; - public static final int thumbnail_bg=0x7f02003d; - public static final int title_text_selector=0x7f02003e; - public static final int video_detail_player_pause=0x7f02003f; - public static final int video_detail_player_start=0x7f020040; - public static final int video_detail_player_top_bg=0x7f020041; - public static final int video_pause_bg=0x7f020042; - public static final int video_player_bg=0x7f020043; + public static final int btn_img_camera=0x7f02000c; + public static final int btn_photopage_top_bar_selector=0x7f02000d; + public static final int btn_play_vedio=0x7f02000e; + public static final int btn_play_vedio_b=0x7f02000f; + public static final int btn_shutter_camera=0x7f020010; + public static final int btn_shutter_record=0x7f020011; + public static final int btn_shutter_recording=0x7f020012; + public static final int btn_shutter_video=0x7f020013; + public static final int btn_shutter_video_click=0x7f020014; + public static final int btn_stop_red=0x7f020015; + public static final int btn_stop_red_click=0x7f020016; + public static final int color_white_yellow=0x7f020017; + public static final int focus_focus_failed=0x7f020018; + public static final int focus_focused=0x7f020019; + public static final int focus_focusing=0x7f02001a; + public static final int gg_ic_video_play=0x7f02001b; + public static final int gg_ic_video_play_on=0x7f02001c; + public static final int have_new_effect_flag=0x7f02001d; + public static final int ic_camera_top_bar_flash_auto_click=0x7f02001e; + public static final int ic_camera_top_bar_flash_auto_normal=0x7f02001f; + public static final int ic_camera_top_bar_flash_off_click=0x7f020020; + public static final int ic_camera_top_bar_flash_off_normal=0x7f020021; + public static final int ic_camera_top_bar_flash_on_click=0x7f020022; + public static final int ic_camera_top_bar_flash_on_normal=0x7f020023; + public static final int ic_camera_top_bar_flash_torch_click=0x7f020024; + public static final int ic_camera_top_bar_flash_torch_normal=0x7f020025; + public static final int ic_camera_top_bar_my_center=0x7f020026; + public static final int ic_camera_top_bar_my_center_normal=0x7f020027; + public static final int ic_camera_top_bar_my_center_pressed=0x7f020028; + public static final int ic_camera_top_bar_setting=0x7f020029; + public static final int ic_camera_top_bar_setting_click=0x7f02002a; + public static final int ic_camera_top_bar_setting_normal=0x7f02002b; + public static final int ic_camera_top_bar_sw_camera=0x7f02002c; + public static final int ic_camera_top_bar_sw_camera_click=0x7f02002d; + public static final int ic_camera_top_bar_sw_camera_normal=0x7f02002e; + public static final int ic_error=0x7f02002f; + public static final int ic_launcher=0x7f020030; + public static final int ic_stub=0x7f020031; + public static final int ic_switch_camera=0x7f020032; + public static final int ic_switch_video=0x7f020033; + public static final int ic_switcher_menu_indicator=0x7f020034; + public static final int icon_back02=0x7f020035; + public static final int icon_back02_click=0x7f020036; + public static final int icon_back2=0x7f020037; + public static final int icon_back2_click=0x7f020038; + public static final int icon_rec=0x7f020039; + public static final int picture_setting_album_checkbox=0x7f02003a; + public static final int progressbar_bg=0x7f02003b; + public static final int progressbar_thumb_record_mix=0x7f02003c; + public static final int thumb_guide_tips_new=0x7f02003d; + public static final int thumbnail_bg=0x7f02003e; + public static final int title_text_selector=0x7f02003f; + public static final int video_detail_player_pause=0x7f020040; + public static final int video_detail_player_start=0x7f020041; + public static final int video_detail_player_top_bg=0x7f020042; + public static final int video_pause_bg=0x7f020043; + public static final int video_player_bg=0x7f020044; } public static final class id { public static final int FrameLayout1=0x7f0a0000; - public static final int action_settings=0x7f0a0032; + public static final int action_settings=0x7f0a0031; public static final int album_bottom_bar=0x7f0a0002; public static final int album_item_bottom_bar=0x7f0a0015; public static final int album_item_header_bar=0x7f0a0014; public static final int albumview=0x7f0a0001; public static final int albumviewpager=0x7f0a0013; - public static final int btnVideoPlayOrPause=0x7f0a002e; - public static final int btn_flash_mode=0x7f0a0020; - public static final int btn_other_setting=0x7f0a0021; - public static final int btn_shutter_camera=0x7f0a001d; - public static final int btn_shutter_record=0x7f0a001c; - public static final int btn_switch_camera=0x7f0a001f; - public static final int btn_switch_mode=0x7f0a001e; + public static final int btnVideoPlayOrPause=0x7f0a002d; + public static final int btn_flash_mode=0x7f0a001f; + public static final int btn_other_setting=0x7f0a0020; + public static final int btn_shutter_camera=0x7f0a001c; + public static final int btn_switch_camera=0x7f0a001e; + public static final int btn_switch_mode=0x7f0a001d; public static final int btn_thumbnail=0x7f0a001a; - public static final int cameraView=0x7f0a0022; + public static final int cameraView=0x7f0a0021; public static final int camera_bottom_bar=0x7f0a0018; public static final int camera_header_bar=0x7f0a0019; - public static final int checkbox=0x7f0a0029; + public static final int checkbox=0x7f0a0028; public static final int container=0x7f0a0017; public static final int delete=0x7f0a0004; public static final int edit=0x7f0a000d; - public static final int focusImageView=0x7f0a0024; + public static final int focusImageView=0x7f0a0023; public static final int header_bar_album_title=0x7f0a0007; public static final int header_bar_back=0x7f0a0006; public static final int header_bar_enter_selection=0x7f0a0008; @@ -187,23 +187,23 @@ public static final class id { public static final int header_bar_photo_to_camera=0x7f0a0011; public static final int header_bar_select=0x7f0a0009; public static final int header_bar_select_counter=0x7f0a000b; - public static final int image=0x7f0a002a; - public static final int imgThumbnail=0x7f0a0028; - public static final int llVideoDetailPlayerBottom=0x7f0a002d; - public static final int loading=0x7f0a002b; + public static final int image=0x7f0a0029; + public static final int imgThumbnail=0x7f0a0027; + public static final int llVideoDetailPlayerBottom=0x7f0a002c; + public static final int loading=0x7f0a002a; public static final int move=0x7f0a0003; public static final int pagerview=0x7f0a0012; - public static final int recordInfo=0x7f0a0025; - public static final int sbVideoDetailPlayer=0x7f0a0031; + public static final int recordInfo=0x7f0a0024; + public static final int sbVideoDetailPlayer=0x7f0a0030; public static final int select_all=0x7f0a000c; - public static final int tempImageView=0x7f0a0023; - public static final int tvVideoPlayRemainTime=0x7f0a0030; - public static final int tvVideoPlayTime=0x7f0a002f; - public static final int videoPlayerView=0x7f0a002c; + public static final int tempImageView=0x7f0a0022; + public static final int tvVideoPlayRemainTime=0x7f0a002f; + public static final int tvVideoPlayTime=0x7f0a002e; + public static final int videoPlayerView=0x7f0a002b; public static final int videoicon=0x7f0a001b; public static final int videoview=0x7f0a0016; - public static final int waterMark=0x7f0a0026; - public static final int zoomSeekBar=0x7f0a0027; + public static final int waterMark=0x7f0a0025; + public static final int zoomSeekBar=0x7f0a0026; } public static final class layout { public static final int activity_main=0x7f030000; diff --git a/Camera/gen/com/linj/cameralibrary/R.java b/Camera/gen/com/linj/cameralibrary/R.java index f913409..e15f3f8 100644 --- a/Camera/gen/com/linj/cameralibrary/R.java +++ b/Camera/gen/com/linj/cameralibrary/R.java @@ -45,45 +45,45 @@ public static final class dimen { public static final class drawable { public static final int albumset_preselected = 0x7f020000; public static final int albumset_selected = 0x7f020001; - public static final int btn_play_vedio = 0x7f02000d; - public static final int btn_play_vedio_b = 0x7f02000e; - public static final int focus_focus_failed = 0x7f020017; - public static final int focus_focused = 0x7f020018; - public static final int focus_focusing = 0x7f020019; - public static final int gg_ic_video_play = 0x7f02001a; - public static final int gg_ic_video_play_on = 0x7f02001b; - public static final int ic_error = 0x7f02002e; - public static final int ic_launcher = 0x7f02002f; - public static final int ic_stub = 0x7f020030; - public static final int icon_rec = 0x7f020038; - public static final int picture_setting_album_checkbox = 0x7f020039; - public static final int progressbar_bg = 0x7f02003a; - public static final int progressbar_thumb_record_mix = 0x7f02003b; - public static final int thumb_guide_tips_new = 0x7f02003c; - public static final int video_detail_player_pause = 0x7f02003f; - public static final int video_detail_player_start = 0x7f020040; - public static final int video_pause_bg = 0x7f020042; - public static final int video_player_bg = 0x7f020043; + public static final int btn_play_vedio = 0x7f02000e; + public static final int btn_play_vedio_b = 0x7f02000f; + public static final int focus_focus_failed = 0x7f020018; + public static final int focus_focused = 0x7f020019; + public static final int focus_focusing = 0x7f02001a; + public static final int gg_ic_video_play = 0x7f02001b; + public static final int gg_ic_video_play_on = 0x7f02001c; + public static final int ic_error = 0x7f02002f; + public static final int ic_launcher = 0x7f020030; + public static final int ic_stub = 0x7f020031; + public static final int icon_rec = 0x7f020039; + public static final int picture_setting_album_checkbox = 0x7f02003a; + public static final int progressbar_bg = 0x7f02003b; + public static final int progressbar_thumb_record_mix = 0x7f02003c; + public static final int thumb_guide_tips_new = 0x7f02003d; + public static final int video_detail_player_pause = 0x7f020040; + public static final int video_detail_player_start = 0x7f020041; + public static final int video_pause_bg = 0x7f020043; + public static final int video_player_bg = 0x7f020044; } public static final class id { - public static final int action_settings = 0x7f0a0032; - public static final int btnVideoPlayOrPause = 0x7f0a002e; - public static final int cameraView = 0x7f0a0022; - public static final int checkbox = 0x7f0a0029; - public static final int focusImageView = 0x7f0a0024; - public static final int image = 0x7f0a002a; - public static final int imgThumbnail = 0x7f0a0028; - public static final int llVideoDetailPlayerBottom = 0x7f0a002d; - public static final int loading = 0x7f0a002b; - public static final int recordInfo = 0x7f0a0025; - public static final int sbVideoDetailPlayer = 0x7f0a0031; - public static final int tempImageView = 0x7f0a0023; - public static final int tvVideoPlayRemainTime = 0x7f0a0030; - public static final int tvVideoPlayTime = 0x7f0a002f; - public static final int videoPlayerView = 0x7f0a002c; + public static final int action_settings = 0x7f0a0031; + public static final int btnVideoPlayOrPause = 0x7f0a002d; + public static final int cameraView = 0x7f0a0021; + public static final int checkbox = 0x7f0a0028; + public static final int focusImageView = 0x7f0a0023; + public static final int image = 0x7f0a0029; + public static final int imgThumbnail = 0x7f0a0027; + public static final int llVideoDetailPlayerBottom = 0x7f0a002c; + public static final int loading = 0x7f0a002a; + public static final int recordInfo = 0x7f0a0024; + public static final int sbVideoDetailPlayer = 0x7f0a0030; + public static final int tempImageView = 0x7f0a0022; + public static final int tvVideoPlayRemainTime = 0x7f0a002f; + public static final int tvVideoPlayTime = 0x7f0a002e; + public static final int videoPlayerView = 0x7f0a002b; public static final int videoicon = 0x7f0a001b; - public static final int waterMark = 0x7f0a0026; - public static final int zoomSeekBar = 0x7f0a0027; + public static final int waterMark = 0x7f0a0025; + public static final int zoomSeekBar = 0x7f0a0026; } public static final class layout { public static final int activity_main = 0x7f030000; diff --git a/Camera/res/drawable/btn_img_camera.xml b/Camera/res/drawable/btn_img_camera.xml new file mode 100644 index 0000000..09fe1ae --- /dev/null +++ b/Camera/res/drawable/btn_img_camera.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/Camera/res/drawable/btn_shutter_camera.xml b/Camera/res/drawable/btn_shutter_camera.xml index 028b540..9bac0a1 100644 --- a/Camera/res/drawable/btn_shutter_camera.xml +++ b/Camera/res/drawable/btn_shutter_camera.xml @@ -1,6 +1,7 @@ + diff --git a/Camera/res/drawable/btn_shutter_record.xml b/Camera/res/drawable/btn_shutter_record.xml index a939833..1efb978 100644 --- a/Camera/res/drawable/btn_shutter_record.xml +++ b/Camera/res/drawable/btn_shutter_record.xml @@ -1,6 +1,7 @@ + diff --git a/Camera/res/layout-port/camera_bottom_bar.xml b/Camera/res/layout-port/camera_bottom_bar.xml index a0313d7..4f35190 100644 --- a/Camera/res/layout-port/camera_bottom_bar.xml +++ b/Camera/res/layout-port/camera_bottom_bar.xml @@ -49,19 +49,21 @@ android:layout_weight="1.0" android:gravity="center" > - - + --> diff --git a/Camera/res/layout-port/camera_header_bar.xml b/Camera/res/layout-port/camera_header_bar.xml index f263eca..dae8fef 100644 --- a/Camera/res/layout-port/camera_header_bar.xml +++ b/Camera/res/layout-port/camera_header_bar.xml @@ -35,7 +35,7 @@ android:layout_height="fill_parent" android:layout_weight="1.0" android:contentDescription="@string/app_name" - android:src="@drawable/btn_flash_on" /> + android:src="@drawable/btn_flash_auto" /> parent, View view, } /** - * ͼƬ - * @param rootPath Ŀ¼ļ - * @param format Ҫصļʽ + * 加载图片 + * @param rootPath 根目录文件夹名 + * @param format 需要加载的文件格式 */ public void loadAlbum(String rootPath,String format){ - //ȡĿ¼ͼļ - String thumbFolder=FileOperateUtil.getFolderPath(this, FileOperateUtil.TYPE_THUMBNAIL, rootPath); + //获取根目录下缩略图文件夹 + String thumbFolder=FileOperateUtil.getFolderPath(this, FileOperateUtil.TYPE_THUMBNAIL, Environment.getExternalStorageDirectory()+"/test"); List files=FileOperateUtil.listFiles(thumbFolder, format); if(files!=null&&files.size()>0){ List paths=new ArrayList(); @@ -188,8 +185,8 @@ private void selectAllClick() { private void showDeleteDialog() { AlertDialog.Builder builder=new AlertDialog.Builder(this); - builder.setMessage("ȷҪҪɾ?") - .setPositiveButton("ȷ", new OnClickListener() { + builder.setMessage("确定要要删除?") + .setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub @@ -202,7 +199,7 @@ public void onClick(DialogInterface dialog, int which) { leaveEdit(); } }) - .setNegativeButton("ȡ", new OnClickListener() { + .setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub diff --git a/Camera/src/com/example/camera/AlbumItemAty.java b/Camera/src/com/example/camera/AlbumItemAty.java index a79c311..f3feac9 100644 --- a/Camera/src/com/example/camera/AlbumItemAty.java +++ b/Camera/src/com/example/camera/AlbumItemAty.java @@ -4,42 +4,39 @@ import java.util.ArrayList; import java.util.List; -import com.linj.FileOperateUtil; -import com.linj.album.view.AlbumViewPager; -import com.linj.album.view.AlbumViewPager.OnPlayVideoListener; -import com.linj.album.view.AlbumViewPager.ViewPagerAdapter; -import com.linj.album.view.MatrixImageView.OnSingleTapListener; -import com.linj.video.view.VideoPlayerContainer; -import com.linj.video.view.VideoPlayerView; - import android.app.Activity; import android.content.Intent; -import android.graphics.Bitmap; import android.os.Bundle; +import android.os.Environment; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.View.OnClickListener; -import android.view.MotionEvent; -import android.view.WindowManager; import android.view.Window; +import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import com.linj.FileOperateUtil; +import com.linj.album.view.AlbumViewPager; +import com.linj.album.view.AlbumViewPager.OnPlayVideoListener; +import com.linj.album.view.MatrixImageView.OnSingleTapListener; +import com.linj.video.view.VideoPlayerContainer; + /** * @ClassName: AlbumItemAty - * @Description:ͼƬͼActivity ͼƬ༭ + * @Description:相册图片大图Activity 包含图片编辑功能 * @author LinJ - * @date 2015-1-12 5:18:25 + * @date 2015-1-12 下午5:18:25 * */ public class AlbumItemAty extends Activity implements OnClickListener,OnSingleTapListener ,OnPlayVideoListener{ public final static String TAG="AlbumDetailAty"; private String mSaveRoot; - private AlbumViewPager mViewPager;//ʾͼ + private AlbumViewPager mViewPager;//显示大图 private VideoPlayerContainer mContainer; private ImageView mBackView; private ImageView mCameraView; @@ -71,7 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { mDeleteButton.setOnClickListener(this); mEditButton.setOnClickListener(this); - mSaveRoot="test"; + mSaveRoot=Environment.getExternalStorageDirectory()+"/test"; mViewPager.setOnPageChangeListener(pageChangeListener); mViewPager.setOnSingleTapListener(this); mViewPager.setOnPlayVideoListener(this); @@ -83,6 +80,8 @@ protected void onCreate(Bundle savedInstanceState) { currentFileName=file.getName(); if(currentFileName.indexOf(".")>0) currentFileName=currentFileName.substring(0, currentFileName.lastIndexOf(".")); + }else{ + Toast.makeText(this, "没有预览", Toast.LENGTH_SHORT).show(); } loadAlbum(mSaveRoot,currentFileName); @@ -90,19 +89,19 @@ protected void onCreate(Bundle savedInstanceState) { /** - * ͼƬ - * @param rootPath ͼƬ· + * 加载图片 + * @param rootPath 图片根路径 */ public void loadAlbum(String rootPath,String fileName){ - //ȡĿ¼ͼļ + //获取根目录下缩略图文件夹 String folder=FileOperateUtil.getFolderPath(this, FileOperateUtil.TYPE_IMAGE, rootPath); String thumbnailFolder=FileOperateUtil.getFolderPath(this, FileOperateUtil.TYPE_THUMBNAIL, rootPath); - //ȡͼƬļͼ + //获取图片文件大图 List imageList=FileOperateUtil.listFiles(folder, ".jpg"); - //ȡƵļͼ + //获取视频文件缩略图 List videoList=FileOperateUtil.listFiles(thumbnailFolder, ".jpg","video"); List files=new ArrayList(); - //ƵļͼͼƬͼб + //将视频文件缩略图加入图片大图列表中 if(videoList!=null&&videoList.size()>0){ files.addAll(videoList); } diff --git a/Camera/src/com/example/camera/CameraAty.java b/Camera/src/com/example/camera/CameraAty.java index 89974cc..e52e988 100644 --- a/Camera/src/com/example/camera/CameraAty.java +++ b/Camera/src/com/example/camera/CameraAty.java @@ -3,35 +3,30 @@ import java.io.File; import java.util.List; -import com.linj.FileOperateUtil; -import com.linj.FileOperateUtil; -import com.linj.album.view.FilterImageView; -import com.linj.camera.view.CameraContainer; -import com.linj.camera.view.CameraContainer.TakePictureListener; -import com.linj.camera.view.CameraView.FlashMode; - - - import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; import android.media.ThumbnailUtils; import android.os.Bundle; -import android.util.Log; +import android.os.Environment; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.Toast; + +import com.linj.FileOperateUtil; +import com.linj.album.view.FilterImageView; +import com.linj.camera.view.CameraContainer; +import com.linj.camera.view.CameraContainer.TakePictureListener; +import com.linj.camera.view.CameraView.FlashMode; /** * @ClassName: CameraAty - * @Description: Զ + * @Description: 自定义照相机类 * @author LinJ - * @date 2014-12-31 9:44:25 + * @date 2014-12-31 上午9:44:25 * */ public class CameraAty extends Activity implements View.OnClickListener,TakePictureListener{ @@ -41,7 +36,7 @@ public class CameraAty extends Activity implements View.OnClickListener,TakePict private CameraContainer mContainer; private FilterImageView mThumbView; private ImageButton mCameraShutterButton; - private ImageButton mRecordShutterButton; +// private ImageButton mRecordShutterButton; private ImageView mFlashView; private ImageButton mSwitchModeButton; private ImageView mSwitchCameraView; @@ -49,6 +44,7 @@ public class CameraAty extends Activity implements View.OnClickListener,TakePict private ImageView mVideoIconView; private View mHeaderBar; private boolean isRecording=false; + private String path; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -56,22 +52,23 @@ public void onCreate(Bundle savedInstanceState) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.camera); - mHeaderBar=findViewById(R.id.camera_header_bar); mContainer=(CameraContainer)findViewById(R.id.container); mThumbView=(FilterImageView)findViewById(R.id.btn_thumbnail); mVideoIconView=(ImageView)findViewById(R.id.videoicon); mCameraShutterButton=(ImageButton)findViewById(R.id.btn_shutter_camera); - mRecordShutterButton=(ImageButton)findViewById(R.id.btn_shutter_record); +// mRecordShutterButton=(ImageButton)findViewById(R.id.btn_shutter_record); mSwitchCameraView=(ImageView)findViewById(R.id.btn_switch_camera); mFlashView=(ImageView)findViewById(R.id.btn_flash_mode); mSwitchModeButton=(ImageButton)findViewById(R.id.btn_switch_mode); mSettingView=(ImageView)findViewById(R.id.btn_other_setting); - - + mContainer.setMaxSize(1024*15); + path = Environment.getExternalStorageDirectory()+"/test"; + mContainer.setSavePath(path, path); + mContainer.setSaveVideoPath(path); mThumbView.setOnClickListener(this); mCameraShutterButton.setOnClickListener(this); - mRecordShutterButton.setOnClickListener(this); +// mRecordShutterButton.setOnClickListener(this); mFlashView.setOnClickListener(this); mSwitchModeButton.setOnClickListener(this); mSwitchCameraView.setOnClickListener(this); @@ -84,16 +81,16 @@ public void onCreate(Bundle savedInstanceState) { /** - * ͼ + * 加载缩略图 */ private void initThumbnail() { - String thumbFolder=FileOperateUtil.getFolderPath(this, FileOperateUtil.TYPE_THUMBNAIL, mSaveRoot); + String thumbFolder=FileOperateUtil.getFolderPath(this, FileOperateUtil.TYPE_THUMBNAIL, path); List files=FileOperateUtil.listFiles(thumbFolder, ".jpg"); if(files!=null&&files.size()>0){ Bitmap thumbBitmap=BitmapFactory.decodeFile(files.get(0).getAbsolutePath()); if(thumbBitmap!=null){ mThumbView.setImageBitmap(thumbBitmap); - //Ƶͼʾͼ + //视频缩略图显示播放图案 if(files.get(0).getAbsolutePath().contains("video")){ mVideoIconView.setVisibility(View.VISIBLE); }else { @@ -109,16 +106,28 @@ private void initThumbnail() { @Override public void onClick(View view) { - // TODO Auto-generated method stub switch (view.getId()) { - case R.id.btn_shutter_camera: - mCameraShutterButton.setClickable(false); - mContainer.takePicture(this); + case R.id.btn_shutter_camera://拍照按钮 + if(!mCameraShutterButton.isSelected()){ + mCameraShutterButton.setClickable(false); + mCameraShutterButton.setEnabled(false); + mContainer.takePicture(this);//拍摄监听 + }else{ + if(!isRecording){ + isRecording=mContainer.startRecord(); +// if (isRecording) { +// mRecordShutterButton.setBackgroundResource(R.drawable.btn_shutter_recording); +// } + }else { + stopRecord(); + } + } + break; - case R.id.btn_thumbnail: + case R.id.btn_thumbnail://相册 startActivity(new Intent(this,AlbumAty.class)); break; - case R.id.btn_flash_mode: + case R.id.btn_flash_mode://闪光灯控制 if(mContainer.getFlashMode()==FlashMode.ON){ mContainer.setFlashMode(FlashMode.OFF); mFlashView.setImageResource(R.drawable.btn_flash_off); @@ -138,9 +147,11 @@ else if (mContainer.getFlashMode()==FlashMode.TORCH) { case R.id.btn_switch_mode: if(mIsRecordMode){ mSwitchModeButton.setImageResource(R.drawable.ic_switch_camera); - mCameraShutterButton.setVisibility(View.VISIBLE); - mRecordShutterButton.setVisibility(View.GONE); - //ģʽʾ˵ + mCameraShutterButton.setSelected(false); + mCameraShutterButton.setEnabled(false); +// mCameraShutterButton.setVisibility(View.VISIBLE); +// mRecordShutterButton.setVisibility(View.GONE); + //拍照模式下显示顶部菜单 mHeaderBar.setVisibility(View.VISIBLE); mIsRecordMode=false; mContainer.switchMode(0); @@ -148,28 +159,30 @@ else if (mContainer.getFlashMode()==FlashMode.TORCH) { } else { mSwitchModeButton.setImageResource(R.drawable.ic_switch_video); - mCameraShutterButton.setVisibility(View.GONE); - mRecordShutterButton.setVisibility(View.VISIBLE); - //¼ģʽض˵ + mCameraShutterButton.setSelected(true); + mCameraShutterButton.setEnabled(true); +// mCameraShutterButton.setVisibility(View.GONE); +// mRecordShutterButton.setVisibility(View.VISIBLE); + //录像模式下隐藏顶部菜单 mHeaderBar.setVisibility(View.GONE); mIsRecordMode=true; mContainer.switchMode(5); } break; - case R.id.btn_shutter_record: - if(!isRecording){ - isRecording=mContainer.startRecord(); - if (isRecording) { - mRecordShutterButton.setBackgroundResource(R.drawable.btn_shutter_recording); - } - }else { - stopRecord(); - } - break; - case R.id.btn_switch_camera: +// case R.id.btn_shutter_record: +// if(!isRecording){ +// isRecording=mContainer.startRecord(); +// if (isRecording) { +// mRecordShutterButton.setBackgroundResource(R.drawable.btn_shutter_recording); +// } +// }else { +// stopRecord(); +// } +// break; + case R.id.btn_switch_camera://相机反转 mContainer.switchCamera(); break; - case R.id.btn_other_setting: + case R.id.btn_other_setting://添加水印 mContainer.setWaterMark(); break; default: @@ -181,18 +194,19 @@ else if (mContainer.getFlashMode()==FlashMode.TORCH) { private void stopRecord() { mContainer.stopRecord(this); isRecording=false; - mRecordShutterButton.setBackgroundResource(R.drawable.btn_shutter_record); +// mRecordShutterButton.setBackgroundResource(R.drawable.btn_shutter_record); } @Override public void onTakePictureEnd(Bitmap thumBitmap) { - mCameraShutterButton.setClickable(true); + mCameraShutterButton.setClickable(true); + mCameraShutterButton.setEnabled(true); } @Override public void onAnimtionEnd(Bitmap bm,boolean isVideo) { if(bm!=null){ - //ͼ + //生成缩略图 Bitmap thumbnail=ThumbnailUtils.extractThumbnail(bm, 213, 213); mThumbView.setImageBitmap(thumbnail); if(isVideo) diff --git a/CameraLibrary/bin/cameralibrary.jar b/CameraLibrary/bin/cameralibrary.jar index 19ae77e..b981159 100644 Binary files a/CameraLibrary/bin/cameralibrary.jar and b/CameraLibrary/bin/cameralibrary.jar differ diff --git a/CameraLibrary/bin/classes/com/linj/FileOperateUtil$1.class b/CameraLibrary/bin/classes/com/linj/FileOperateUtil$1.class index 69bd94a..90c7d9d 100644 Binary files a/CameraLibrary/bin/classes/com/linj/FileOperateUtil$1.class and b/CameraLibrary/bin/classes/com/linj/FileOperateUtil$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/FileOperateUtil$2.class b/CameraLibrary/bin/classes/com/linj/FileOperateUtil$2.class index 22673a6..995d824 100644 Binary files a/CameraLibrary/bin/classes/com/linj/FileOperateUtil$2.class and b/CameraLibrary/bin/classes/com/linj/FileOperateUtil$2.class differ diff --git a/CameraLibrary/bin/classes/com/linj/FileOperateUtil.class b/CameraLibrary/bin/classes/com/linj/FileOperateUtil.class index f8410dc..e28e2da 100644 Binary files a/CameraLibrary/bin/classes/com/linj/FileOperateUtil.class and b/CameraLibrary/bin/classes/com/linj/FileOperateUtil.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$AlbumViewAdapter.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$AlbumViewAdapter.class index 37837a1..efcc135 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$AlbumViewAdapter.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$AlbumViewAdapter.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$OnCheckedChangeListener.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$OnCheckedChangeListener.class index ce3a119..101aa06 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$OnCheckedChangeListener.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView$OnCheckedChangeListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView.class index 78c0920..bab59b6 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumGridView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$OnPlayVideoListener.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$OnPlayVideoListener.class index d7ba22d..a9cbe82 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$OnPlayVideoListener.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$OnPlayVideoListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter$1.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter$1.class index e82fcc6..c8d14a6 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter$1.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter.class index 350f6f7..eec2b1e 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager$ViewPagerAdapter.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager.class b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager.class index 709d26d..6bb88ef 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager.class and b/CameraLibrary/bin/classes/com/linj/album/view/AlbumViewPager.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/FilterImageView.class b/CameraLibrary/bin/classes/com/linj/album/view/FilterImageView.class index 3e53cac..bede65c 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/FilterImageView.class and b/CameraLibrary/bin/classes/com/linj/album/view/FilterImageView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$1.class b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$1.class index 3b943c1..13afd06 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$1.class and b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$GestureListener.class b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$GestureListener.class index e9c0629..dee3649 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$GestureListener.class and b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$GestureListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$MatrixTouchListener.class b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$MatrixTouchListener.class index d0aaeb5..8c4b358 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$MatrixTouchListener.class and b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$MatrixTouchListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnMovingListener.class b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnMovingListener.class index e05124e..d1b5749 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnMovingListener.class and b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnMovingListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnSingleTapListener.class b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnSingleTapListener.class index 98a4cb1..430ad2f 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnSingleTapListener.class and b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView$OnSingleTapListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView.class b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView.class index 8cd02aa..6c2b6af 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView.class and b/CameraLibrary/bin/classes/com/linj/album/view/MatrixImageView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView$ViewHolder.class b/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView$ViewHolder.class index 657b1d8..d5a260b 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView$ViewHolder.class and b/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView$ViewHolder.class differ diff --git a/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView.class b/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView.class index 71423f9..0fd4fb2 100644 Binary files a/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView.class and b/CameraLibrary/bin/classes/com/linj/album/view/ThumbnaiImageView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$1.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$1.class index 44c6f29..94bbb05 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$1.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2$1.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2$1.class index 5b1420d..d286534 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2$1.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2.class index cdf9111..a38050e 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$2.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$3.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$3.class index 9917784..fe6a47b 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$3.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$3.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$4.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$4.class index 14edc2c..1aea3cb 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$4.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$4.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$DataHandler.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$DataHandler.class index 7549599..cc323cb 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$DataHandler.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$DataHandler.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TakePictureListener.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TakePictureListener.class index 0be973e..38f6fb3 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TakePictureListener.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TakePictureListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener$1.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener$1.class index 362b9bd..6e60367 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener$1.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener.class index 109176d..0c94536 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer$TouchListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer.class index 5d88a64..9c51233 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraContainer.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraOperation.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraOperation.class index 8af33df..952cb97 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraOperation.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraOperation.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$1.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$1.class index 78839e1..e0b6abd 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$1.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$2.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$2.class index e57e6f1..c800371 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$2.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$2.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$FlashMode.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$FlashMode.class index 2555025..440cf85 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$FlashMode.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView$FlashMode.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView.class b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView.class index 4f2def4..8e5abe4 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/CameraView.class and b/CameraLibrary/bin/classes/com/linj/camera/view/CameraView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$1.class b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$1.class index a79a378..0ccd884 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$1.class and b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$2.class b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$2.class index 6ca6fe0..21163b7 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$2.class and b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$2.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$3.class b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$3.class index bf64d2d..065700f 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$3.class and b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView$3.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView.class b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView.class index 84018bc..6a1b8b0 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView.class and b/CameraLibrary/bin/classes/com/linj/camera/view/FocusImageView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/camera/view/TempImageView.class b/CameraLibrary/bin/classes/com/linj/camera/view/TempImageView.class index deb52e7..244f884 100644 Binary files a/CameraLibrary/bin/classes/com/linj/camera/view/TempImageView.class and b/CameraLibrary/bin/classes/com/linj/camera/view/TempImageView.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/BuildConfig.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/BuildConfig.class index 5d511ca..c827b89 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/BuildConfig.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/BuildConfig.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$anim.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$anim.class index 104a5c5..ff27f73 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$anim.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$anim.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$attr.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$attr.class index 85d0a97..f24e91a 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$attr.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$attr.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$color.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$color.class index c974a07..b08bbab 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$color.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$color.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$dimen.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$dimen.class index f01679e..2163a09 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$dimen.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$dimen.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$drawable.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$drawable.class index f92871e..f0c031a 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$drawable.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$drawable.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$id.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$id.class index 1c9286e..e424971 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$id.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$id.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$layout.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$layout.class index 10cd88e..bcb1a77 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$layout.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$layout.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$menu.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$menu.class index 08bd52c..d59b736 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$menu.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$menu.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$string.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$string.class index 0b11d56..c92e1da 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$string.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$string.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$style.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$style.class index 38a1bdb..e9ed8c9 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$style.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$style.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$styleable.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$styleable.class index 3772330..cfa5049 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R$styleable.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R$styleable.class differ diff --git a/CameraLibrary/bin/classes/com/linj/cameralibrary/R.class b/CameraLibrary/bin/classes/com/linj/cameralibrary/R.class index 4555b53..c299a41 100644 Binary files a/CameraLibrary/bin/classes/com/linj/cameralibrary/R.class and b/CameraLibrary/bin/classes/com/linj/cameralibrary/R.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions$Builder.class b/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions$Builder.class index 20ba1ee..e97d7c7 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions$Builder.class and b/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions$Builder.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions.class b/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions.class index e8ebdb3..a5ae01a 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions.class and b/CameraLibrary/bin/classes/com/linj/imageloader/DisplayImageOptions.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/DownloadImgUtils.class b/CameraLibrary/bin/classes/com/linj/imageloader/DownloadImgUtils.class index aefed1b..3154ff2 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/DownloadImgUtils.class and b/CameraLibrary/bin/classes/com/linj/imageloader/DownloadImgUtils.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$1.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$1.class index b7fe02c..809ae3e 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$1.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$2.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$2.class index 9f8e477..53430d6 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$2.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$2.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$3.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$3.class index 63f77af..68646d1 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$3.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$3.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$4.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$4.class index 88ef5a0..99c3bff 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$4.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$4.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$ImgBeanHolder.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$ImgBeanHolder.class index e7b15f6..3a9d098 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$ImgBeanHolder.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$ImgBeanHolder.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$Type.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$Type.class index bb6e3b2..be7a8ad 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$Type.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader$Type.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader.class index 8604179..0aa4971 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageLoader.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil$ImageSize.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil$ImageSize.class index b959797..d6a9bae 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil$ImageSize.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil$ImageSize.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil.class b/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil.class index 8c33b1c..2a6ba3b 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil.class and b/CameraLibrary/bin/classes/com/linj/imageloader/ImageSizeUtil.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/BitmapDisplayer.class b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/BitmapDisplayer.class index bf91af6..76f189f 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/BitmapDisplayer.class and b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/BitmapDisplayer.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/MatrixBitmapDisplayer.class b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/MatrixBitmapDisplayer.class index 6c2fe45..493d659 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/MatrixBitmapDisplayer.class and b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/MatrixBitmapDisplayer.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer$RoundedDrawable.class b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer$RoundedDrawable.class index 8b37bdd..e3ca3b4 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer$RoundedDrawable.class and b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer$RoundedDrawable.class differ diff --git a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer.class b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer.class index eee5e8e..8bb882b 100644 Binary files a/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer.class and b/CameraLibrary/bin/classes/com/linj/imageloader/displayer/RoundedBitmapDisplayer.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$1.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$1.class index 6ca5291..b84c3a2 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$1.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$2.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$2.class index 7fa7015..33af7f4 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$2.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer$2.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer.class index 7cf70eb..c06acc6 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerContainer.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerOperation.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerOperation.class index 8e7c543..a764541 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerOperation.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerOperation.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$1.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$1.class index 443874e..5843e5f 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$1.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$1.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$PlayerListener.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$PlayerListener.class index 6f403ef..7632d2e 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$PlayerListener.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView$PlayerListener.class differ diff --git a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView.class b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView.class index 5e6a501..e95500c 100644 Binary files a/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView.class and b/CameraLibrary/bin/classes/com/linj/video/view/VideoPlayerView.class differ diff --git a/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focus_failed.9.png b/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focus_failed.9.png index 5642580..19035f2 100644 Binary files a/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focus_failed.9.png and b/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focus_failed.9.png differ diff --git a/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focused.9.png b/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focused.9.png index 9944fe6..55f5a34 100644 Binary files a/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focused.9.png and b/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focused.9.png differ diff --git a/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focusing.9.png b/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focusing.9.png index d84bdda..af0b80e 100644 Binary files a/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focusing.9.png and b/CameraLibrary/bin/res/crunch/drawable-hdpi/focus_focusing.9.png differ diff --git a/CameraLibrary/gen/com/linj/cameralibrary/R.java b/CameraLibrary/gen/com/linj/cameralibrary/R.java index c40bde1..eda9723 100644 --- a/CameraLibrary/gen/com/linj/cameralibrary/R.java +++ b/CameraLibrary/gen/com/linj/cameralibrary/R.java @@ -226,7 +226,7 @@ theme attribute (in the form containing a value of this type. @attr name com.linj.cameralibrary:focus_fail_id */ - public static final int FocusImageView_focus_fail_id = 2; + public static int FocusImageView_focus_fail_id = 2; /**

This symbol is the offset where the {@link com.linj.cameralibrary.R.attr#focus_focusing_id} attribute's value can be found in the {@link #FocusImageView} array. @@ -240,7 +240,7 @@ theme attribute (in the form containing a value of this type. @attr name com.linj.cameralibrary:focus_focusing_id */ - public static final int FocusImageView_focus_focusing_id = 0; + public static int FocusImageView_focus_focusing_id = 0; /**

This symbol is the offset where the {@link com.linj.cameralibrary.R.attr#focus_success_id} attribute's value can be found in the {@link #FocusImageView} array. @@ -254,7 +254,7 @@ theme attribute (in the form containing a value of this type. @attr name com.linj.cameralibrary:focus_success_id */ - public static final int FocusImageView_focus_success_id = 1; + public static int FocusImageView_focus_success_id = 1; /** Attributes that can be used with a TempImageView.

Includes the following attributes:

@@ -281,6 +281,6 @@ theme attribute (in the form containing a value of this type. @attr name com.linj.cameralibrary:animat_id */ - public static final int TempImageView_animat_id = 0; + public static int TempImageView_animat_id = 0; }; } diff --git a/CameraLibrary/res/layout-port/cameracontainer.xml b/CameraLibrary/res/layout-port/cameracontainer.xml index 91e2aa4..c71f7ce 100644 --- a/CameraLibrary/res/layout-port/cameracontainer.xml +++ b/CameraLibrary/res/layout-port/cameracontainer.xml @@ -40,8 +40,6 @@ android:id="@+id/waterMark" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentBottom="true" - android:layout_alignParentRight="true" android:src="@drawable/thumb_guide_tips_new" android:visibility="gone" /> diff --git a/CameraLibrary/src/com/linj/FileOperateUtil.java b/CameraLibrary/src/com/linj/FileOperateUtil.java index 401e62f..1b68442 100644 --- a/CameraLibrary/src/com/linj/FileOperateUtil.java +++ b/CameraLibrary/src/com/linj/FileOperateUtil.java @@ -1,10 +1,7 @@ package com.linj; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.FilenameFilter; -import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -15,45 +12,72 @@ import java.util.List; import java.util.Locale; -import com.linj.cameralibrary.R; - -import android.app.Activity; import android.content.Context; -import android.os.Environment; +import android.text.TextUtils; + +import com.linj.cameralibrary.R; /** * @ClassName: FileOperateUtil - * @Description: ļ + * @Description: 文件操作工具类 * @author LinJ - * @date 2014-12-31 9:44:38 + * @date 2014-12-31 上午9:44:38 * */ public class FileOperateUtil { public final static String TAG="FileOperateUtil"; - public final static int ROOT=0;//Ŀ¼ - public final static int TYPE_IMAGE=1;//ͼƬ - public final static int TYPE_THUMBNAIL=2;//ͼ - public final static int TYPE_VIDEO=3;//Ƶ + public final static int ROOT=0;//根目录 + public final static int TYPE_IMAGE=1;//图片 + public final static int TYPE_THUMBNAIL=2;//缩略图 + public final static int TYPE_VIDEO=3;//视频 /** - *ȡļ· - * @param type ļ - * @param rootPath Ŀ¼ļ Ϊҵˮ + *获取文件夹路径 + * @param type 文件夹类别 + * @param rootPath 根目录文件夹名字 为业务流水号 * @return */ - public static String getFolderPath(Context context,int type,String rootPath) { - //ҵļĿ¼ + public static String getExternalFolderPath(Context context,int type,String rootPath) { + //本业务文件主目录 StringBuilder pathBuilder=new StringBuilder(); - //Ӧô洢· + //添加应用存储路径 pathBuilder.append(context.getExternalFilesDir(null).getAbsolutePath()); pathBuilder.append(File.separator); - //ļĿ¼ + //添加文件总目录 pathBuilder.append(context.getString(R.string.Files)); pathBuilder.append(File.separator); - //ӵȻļ· - pathBuilder.append(rootPath); - pathBuilder.append(File.separator); + //添加当然文件类别的路径 + if(!TextUtils.isEmpty(rootPath)){ + pathBuilder.append(rootPath); + pathBuilder.append(File.separator); + } + switch (type) { + case TYPE_IMAGE: + pathBuilder.append(context.getString(R.string.Image)); + break; + case TYPE_VIDEO: + pathBuilder.append(context.getString(R.string.Video)); + break; + case TYPE_THUMBNAIL: + pathBuilder.append(context.getString(R.string.Thumbnail)); + break; + default: + break; + } + return pathBuilder.toString(); + } + public static String getFolderPath(Context context,int type,String rootPath) { + if(TextUtils.isEmpty(rootPath)){ + return getExternalFolderPath(context, type, rootPath); + } + //本业务文件主目录 + StringBuilder pathBuilder=new StringBuilder(); + //添加当然文件类别的路径 + if(!TextUtils.isEmpty(rootPath)){ + pathBuilder.append(rootPath); + pathBuilder.append(File.separator); + } switch (type) { case TYPE_IMAGE: pathBuilder.append(context.getString(R.string.Image)); @@ -71,10 +95,10 @@ public static String getFolderPath(Context context,int type,String rootPath) { } /** - * ȡĿļָ׺ļ,޸ - * @param file Ŀļ· - * @param extension ָ׺ - * @param content ,ԲƵͼ + * 获取目标文件夹内指定后缀名的文件数组,按照修改日期排序 + * @param file 目标文件夹路径 + * @param extension 指定后缀名 + * @param content 包含的内容,用以查找视频缩略图 * @return */ public static List listFiles(String file,final String format,String content){ @@ -84,10 +108,10 @@ public static List listFiles(String file,final String format){ return listFiles(new File(file), format,null); } /** - * ȡĿļָ׺ļ,޸ - * @param file Ŀļ - * @param extension ָ׺ - * @param content ,ԲƵͼ + * 获取目标文件夹内指定后缀名的文件数组,按照修改日期排序 + * @param file 目标文件夹 + * @param extension 指定后缀名 + * @param content 包含的内容,用以查找视频缩略图 * @return */ public static List listFiles(File file,final String extension,final String content){ @@ -115,12 +139,12 @@ public boolean accept(File arg0, String arg1) { } /** - * ޸ʱΪļб - * @param list ļб - * @param asc Ƿ trueΪ falseΪ + * 根据修改时间为文件列表排序 + * @param list 排序的文件列表 + * @param asc 是否升序排序 true为升序 false为降序 */ public static void sortList(List list,final boolean asc){ - //޸ + //按修改日期排序 Collections.sort(list, new Comparator() { public int compare(File file, File newFile) { if (file.lastModified() > newFile.lastModified()) { @@ -145,62 +169,62 @@ public int compare(File file, File newFile) { /** * - * @param extension ׺ ".jpg" + * @param extension 后缀名 如".jpg" * @return */ public static String createFileNmae(String extension){ DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault()); - // תΪַ + // 转换为字符串 String formatDate = format.format(new Date()); - //鿴Ƿ"." + //查看是否带"." if(!extension.startsWith(".")) extension="."+extension; return formatDate+extension; } /** - * ɾͼ ͬʱɾԴͼԴƵ - * @param thumbPath ͼ· + * 删除缩略图 同时删除源图或源视频 + * @param thumbPath 缩略图路径 * @return */ public static boolean deleteThumbFile(String thumbPath,Context context) { boolean flag = false; File file = new File(thumbPath); - if (!file.exists()) { // ļֱӷ + if (!file.exists()) { // 文件不存在直接返回 return flag; } flag = file.delete(); - //Դļ· + //源文件路径 String sourcePath=thumbPath.replace(context.getString(R.string.Thumbnail), context.getString(R.string.Image)); file = new File(sourcePath); - if (!file.exists()) { // ļֱӷ + if (!file.exists()) { // 文件不存在直接返回 return flag; } flag = file.delete(); return flag; } /** - * ɾԴͼԴƵ ͬʱɾͼ - * @param sourcePath ͼ· + * 删除源图或源视频 同时删除缩略图 + * @param sourcePath 缩略图路径 * @return */ public static boolean deleteSourceFile(String sourcePath,Context context) { boolean flag = false; File file = new File(sourcePath); - if (!file.exists()) { // ļֱӷ + if (!file.exists()) { // 文件不存在直接返回 return flag; } flag = file.delete(); - //ͼļ· + //缩略图文件路径 String thumbPath=sourcePath.replace(context.getString(R.string.Image), context.getString(R.string.Thumbnail)); file = new File(thumbPath); - if (!file.exists()) { // ļֱӷ + if (!file.exists()) { // 文件不存在直接返回 return flag; } flag = file.delete(); diff --git a/CameraLibrary/src/com/linj/album/view/AlbumGridView.java b/CameraLibrary/src/com/linj/album/view/AlbumGridView.java index 011b6d0..f1cae45 100644 --- a/CameraLibrary/src/com/linj/album/view/AlbumGridView.java +++ b/CameraLibrary/src/com/linj/album/view/AlbumGridView.java @@ -24,24 +24,24 @@ /** * @ClassName: AlbumView - * @Description: View̳GridViewװAdapterͼƬط + * @Description: 相册View,继承于GridView,封装了Adapter和图片加载方法 * @author LinJ - * @date 2015-1-5 5:09:08 + * @date 2015-1-5 下午5:09:08 * */ public class AlbumGridView extends GridView{ public final static String TAG="AlbumView"; - /** ͼƬ Ż˻ */ + /** 图片加载器 优化了了缓存 */ private ImageLoader mImageLoader; - /** ͼƬò */ + /** 加载图片配置参数 */ private DisplayImageOptions mOptions; - /** ǰǷڱ༭״̬ trueΪ༭ */ + /** 当前是否处于编辑状态 true为编辑 */ private boolean mEditable; public AlbumGridView(Context context, AttributeSet attrs) { super(context, attrs); mImageLoader= ImageLoader.getInstance(context); - //ͼƬز + //设置网络图片加载参数 DisplayImageOptions.Builder builder= new DisplayImageOptions.Builder(); builder =builder .showImageOnLoading(R.drawable.ic_stub) @@ -51,39 +51,39 @@ public AlbumGridView(Context context, AttributeSet attrs) { .displayer(new RoundedBitmapDisplayer(20)); mOptions=builder.build(); setBackgroundColor(Color.WHITE); - //شֱ + //隐藏垂直滚动条 setVerticalScrollBarEnabled(false); } /** - * ȫѡͼƬ - * @param listener ѡͼƬִеĻص + * 全选图片 + * @param listener 选择图片后执行的回调函数 */ public void selectAll(AlbumGridView.OnCheckedChangeListener listener){ ((AlbumViewAdapter)getAdapter()).selectAll(listener); } /** - * ȡȫѡͼƬ - * @param listener ѡͼƬִеĻص + * 取消全选图片 + * @param listener 选择图片后执行的回调函数 */ public void unSelectAll(AlbumGridView.OnCheckedChangeListener listener){ ((AlbumViewAdapter)getAdapter()).unSelectAll(listener); } /** - * ÿɱ༭״̬ - * @param editable Ƿɱ༭ + * 设置可编辑状态 + * @param editable 是否可编辑 */ public void setEditable(boolean editable){ mEditable=editable; ((AlbumViewAdapter)getAdapter()).notifyDataSetChanged(null); } /** - * ÿɱ༭״̬ - * @param editable Ƿɱ༭ - * @param listener ѡͼƬִеĻص + * 设置可编辑状态 + * @param editable 是否可编辑 + * @param listener 选择图片后执行的回调函数 */ public void setEditable(boolean editable,AlbumGridView.OnCheckedChangeListener listener){ mEditable=editable; @@ -91,7 +91,7 @@ public void setEditable(boolean editable,AlbumGridView.OnCheckedChangeListener l } /** - * ȡɱ༭״̬ + * 获取可编辑状态 * @return */ public boolean getEditable(){ @@ -99,7 +99,7 @@ public boolean getEditable(){ } /** - * ȡǰѡͼƬ· + * 获取当前选择的图片路径集合 * @return */ public Set getSelectedItems(){ @@ -113,9 +113,9 @@ public void notifyDataSetChanged() { /** * @ClassName: OnCheckedChangeListener - * @Description: ͼƬѡкļӿڣactivityص + * @Description: 图片选中后的监听接口,用以在activity内做回调处理 * @author LinJ - * @date 2015-1-5 5:13:43 + * @date 2015-1-5 下午5:13:43 * */ public interface OnCheckedChangeListener{ @@ -125,21 +125,21 @@ public interface OnCheckedChangeListener{ /** * @ClassName: AlbumViewAdapter - * @Description: GridView + * @Description: 相册GridView适配器 * @author LinJ - * @date 2015-1-5 5:14:14 + * @date 2015-1-5 下午5:14:14 * */ public class AlbumViewAdapter extends BaseAdapter implements OnClickListener,CompoundButton.OnCheckedChangeListener { - /** صļ· */ + /** 加载的文件路径集合 */ List mPaths; - /** ǰѡеļļ */ + /** 当前选中的文件的集合 */ Set itemSelectedSet=new HashSet(); - /** ѡͼƬִеĻص */ + /** 选中图片后执行的回调函数 */ AlbumGridView.OnCheckedChangeListener listener=null; @@ -149,17 +149,17 @@ public AlbumViewAdapter(List paths) { this.mPaths = paths; } /** - * ݸıʱ» + * 适配器内容改变时,重新绘制 * @param listener */ public void notifyDataSetChanged(AlbumGridView.OnCheckedChangeListener listener) { - //map + //重置map itemSelectedSet=new HashSet(); this.listener=listener; super.notifyDataSetChanged(); } /** - * ѡļ + * 选中所有文件 * @param listener */ public void selectAll(AlbumGridView.OnCheckedChangeListener listener){ @@ -172,7 +172,7 @@ public void selectAll(AlbumGridView.OnCheckedChangeListener listener){ } /** - * ȡѡļ + * 取消选中所有文件 * @param listener */ public void unSelectAll(AlbumGridView.OnCheckedChangeListener listener){ @@ -180,7 +180,7 @@ public void unSelectAll(AlbumGridView.OnCheckedChangeListener listener){ if(listener!=null) listener.onCheckedChanged(itemSelectedSet); } /** - * ȡǰѡļļ + * 获取当前选中文件的集合 * @return */ public Set getSelectedItems(){ @@ -213,7 +213,7 @@ public View getView(int position, View convertView, ViewGroup parent) { ThumbnaiImageView albumItemView = (ThumbnaiImageView)convertView; if (albumItemView == null) albumItemView = new ThumbnaiImageView(getContext(),mImageLoader,mOptions); albumItemView.setOnCheckedChangeListener(this); - //õ¼ItemClick¼תΪAlbumItemViewClick¼ + //设置点击事件,将ItemClick事件转化为AlbumItemView的Click事件 albumItemView.setOnClickListener(this); String path=getItem(position); albumItemView.setTags(path,position, mEditable, itemSelectedSet.contains(path)); @@ -223,7 +223,7 @@ public View getView(int position, View convertView, ViewGroup parent) { @Override public void onClick(View v) { if(getOnItemClickListener()!=null){ - //ȡ㸸࣬ΪonClickFilterImageView + //这里取了上两层父类,因为真正触onClick的是FilterImageView ThumbnaiImageView view=(ThumbnaiImageView)v.getParent().getParent(); getOnItemClickListener().onItemClick(AlbumGridView.this, view, view.getPosition(), 0L); } diff --git a/CameraLibrary/src/com/linj/album/view/AlbumViewPager.java b/CameraLibrary/src/com/linj/album/view/AlbumViewPager.java index 18e667c..36e5807 100644 --- a/CameraLibrary/src/com/linj/album/view/AlbumViewPager.java +++ b/CameraLibrary/src/com/linj/album/view/AlbumViewPager.java @@ -1,18 +1,8 @@ package com.linj.album.view; -import java.io.File; -import java.util.ArrayList; import java.util.List; - -import com.linj.FileOperateUtil; -import com.linj.album.view.MatrixImageView.OnMovingListener; -import com.linj.album.view.MatrixImageView.OnSingleTapListener; -import com.linj.cameralibrary.R; -import com.linj.imageloader.DisplayImageOptions; -import com.linj.imageloader.ImageLoader; -import com.linj.imageloader.displayer.MatrixBitmapDisplayer; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; @@ -21,37 +11,44 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; -import android.widget.TextView; import android.widget.Toast; +import com.linj.FileOperateUtil; +import com.linj.album.view.MatrixImageView.OnMovingListener; +import com.linj.album.view.MatrixImageView.OnSingleTapListener; +import com.linj.cameralibrary.R; +import com.linj.imageloader.DisplayImageOptions; +import com.linj.imageloader.ImageLoader; +import com.linj.imageloader.displayer.MatrixBitmapDisplayer; + /** * @ClassName: AlbumViewPager - * @Description: Զviewpager ݼ + * @Description: 自定义viewpager 优化了事件拦截 * @author LinJ - * @date 2015-1-9 5:33:33 + * @date 2015-1-9 下午5:33:33 * */ public class AlbumViewPager extends ViewPager implements OnMovingListener { public final static String TAG="AlbumViewPager"; - /** ͼƬ Ż˻ */ + /** 图片加载器 优化了了缓存 */ private ImageLoader mImageLoader; - /** ͼƬò */ + /** 加载图片配置参数 */ private DisplayImageOptions mOptions; - /** ǰӿؼǷ϶״̬ */ + /** 当前子控件是否处理拖动状态 */ private boolean mChildIsBeingDragged=false; - /** 浥¼ ʾز˵ */ + /** 界面单击事件 用以显示和隐藏菜单栏 */ private OnSingleTapListener onSingleTapListener; - /** Űť¼ */ + /** 播放按钮点击事件 */ private OnPlayVideoListener onPlayVideoListener; public AlbumViewPager(Context context, AttributeSet attrs) { super(context, attrs); mImageLoader= ImageLoader.getInstance(context); - //ͼƬز + //设置网络图片加载参数 DisplayImageOptions.Builder builder= new DisplayImageOptions.Builder(); builder =builder .showImageOnLoading(R.drawable.ic_stub) @@ -66,10 +63,13 @@ public AlbumViewPager(Context context, AttributeSet attrs) { /** - * ɾǰ - * @return ǰλ/ + * 删除当前项 + * @return “当前位置/总数量” */ public String deleteCurrentPath(){ + if(getAdapter()==null){ + return ""; + } return ((ViewPagerAdapter)getAdapter()).deleteCurrentItem(getCurrentItem()); } @@ -106,7 +106,7 @@ public interface OnPlayVideoListener{ } public class ViewPagerAdapter extends PagerAdapter { - private List paths;//ͼַ ΪͼƬ Ϊͼurl + private List paths;//大图地址 如果为网络图片 则为大图url public ViewPagerAdapter(List paths){ this.paths=paths; } @@ -118,8 +118,8 @@ public int getCount() { @Override public Object instantiateItem(ViewGroup viewGroup, int position) { - //ע⣬ﲻԼinflateʱֱӵviewGroup£ҪaddView - //ΪֱӼӵviewGroup»ᵼ·صviewΪviewGroup + //注意,这里不可以加inflate的时候直接添加到viewGroup下,而需要用addView重新添加 + //因为直接加到viewGroup下会导致返回的view为viewGroup View imageLayout = inflate(getContext(),R.layout.item_album_pager, null); viewGroup.addView(imageLayout); assert imageLayout != null; @@ -163,7 +163,7 @@ public void onClick(View v) { @Override public int getItemPosition(Object object) { - //notifyDataSetChangedʱNone» + //在notifyDataSetChanged时返回None,重新绘制 return POSITION_NONE; } @@ -177,8 +177,11 @@ public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } - //Զȡǰview + //自定义获取当前view方法 public String deleteCurrentItem(int position) { + if(paths==null||paths.size()<=0){ + return ""; + } String path=paths.get(position); if(path!=null) { FileOperateUtil.deleteSourceFile(path, getContext()); diff --git a/CameraLibrary/src/com/linj/album/view/FilterImageView.java b/CameraLibrary/src/com/linj/album/view/FilterImageView.java index b3b4330..377c49b 100644 --- a/CameraLibrary/src/com/linj/album/view/FilterImageView.java +++ b/CameraLibrary/src/com/linj/album/view/FilterImageView.java @@ -14,14 +14,14 @@ /** * @ClassName: FilterImageView - * @Description: ʱʾ仯(˾Ч)ImageViewViewTouch¼ᵼClick¼޷ + * @Description: 点击时显示明暗变化(滤镜效果)的ImageView,该View捕获了Touch事件,会导致容器的Click事件无法触发 * @author LinJ - * @date 2015-1-6 2:13:46 + * @date 2015-1-6 下午2:13:46 * */ public class FilterImageView extends ImageView implements GestureDetector.OnGestureListener{ public static final String TAG="FilterImageView"; - /** */ + /** 监听手势*/ private GestureDetector mGestureDetector; public FilterImageView(Context context, AttributeSet attrs) { super(context, attrs); @@ -31,8 +31,8 @@ public FilterImageView(Context context, AttributeSet attrs) { @Override public boolean onTouchEvent(MotionEvent event) { - //cancelォ˾ȡעⲻҪcacncel¼,mGestureDetectorжcancelIJ - //ڻGridViewʱAbsListViewصMoveUP¼ֱӸӿؼCancel + //在cancel里将滤镜取消,注意不要捕获cacncel事件,mGestureDetector里有对cancel的捕获操作 + //在滑动GridView时,AbsListView会拦截掉Move和UP事件,直接给子控件返回Cancel if(event.getActionMasked()== MotionEvent.ACTION_CANCEL ||event.getActionMasked()== MotionEvent.ACTION_UP){ removeFilter(); @@ -41,32 +41,32 @@ public boolean onTouchEvent(MotionEvent event) { } /** - * ˾ + * 设置滤镜 */ private void setFilter() { - //ȻȡõsrcͼƬ + //先获取设置的src图片 Drawable drawable=getDrawable(); - //srcͼƬΪNullȡͼƬ + //当src图片为Null,获取背景图片 if (drawable==null) { drawable=getBackground(); } if(drawable!=null){ - //˾ + //设置滤镜 drawable.setColorFilter(Color.GRAY,PorterDuff.Mode.MULTIPLY);; } } /** - * ˾ + * 清除滤镜 */ private void removeFilter() { - //ȻȡõsrcͼƬ + //先获取设置的src图片 Drawable drawable=getDrawable(); - //srcͼƬΪNullȡͼƬ + //当src图片为Null,获取背景图片 if (drawable==null) { drawable=getBackground(); } if(drawable!=null){ - //˾ + //清除滤镜 drawable.clearColorFilter(); } } @@ -74,7 +74,7 @@ private void removeFilter() { @Override public boolean onDown(MotionEvent e) { setFilter(); - //뷵trueʾ񱾴touch¼ + //这里必须返回true,表示捕获本次touch事件 return true; } @@ -100,7 +100,7 @@ public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, @Override public void onLongPress(MotionEvent e) { - //ʱֶ¼ + //长按时,手动触发长安事件 performLongClick(); } diff --git a/CameraLibrary/src/com/linj/album/view/MatrixImageView.java b/CameraLibrary/src/com/linj/album/view/MatrixImageView.java index b12d480..7fcc898 100644 --- a/CameraLibrary/src/com/linj/album/view/MatrixImageView.java +++ b/CameraLibrary/src/com/linj/album/view/MatrixImageView.java @@ -16,21 +16,21 @@ /** * @ClassName: MatrixImageView - * @Description: ŴСƶЧImageView + * @Description: 带放大、缩小、移动效果的ImageView * @author LinJ - * @date 2015-1-7 11:15:07 + * @date 2015-1-7 上午11:15:07 * */ public class MatrixImageView extends ImageView{ public final static String TAG="MatrixImageView"; private GestureDetector mGestureDetector; - /** ģMatrixԳʼ */ + /** 模板Matrix,用以初始化 */ private Matrix mMatrix=new Matrix(); - /** ͼƬ*/ + /** 图片长度*/ private float mImageWidth; - /** ͼƬ߶ */ + /** 图片高度 */ private float mImageHeight; - /** ԭʼż */ + /** 原始缩放级别 */ private float mScale ; private OnMovingListener moveListener; @@ -41,9 +41,9 @@ public MatrixImageView(Context context, AttributeSet attrs) { MatrixTouchListener mListener=new MatrixTouchListener(); setOnTouchListener(mListener); mGestureDetector=new GestureDetector(getContext(), new GestureListener(mListener)); - //Ϊbalck + //背景设置为balck setBackgroundColor(Color.BLACK); - //ΪCENTER_INSIDEʾͼƬʾ,ҿֵΪؼ + //将缩放类型设置为CENTER_INSIDE,表示把图片居中显示,并且宽高最大值为控件宽高 setScaleType(ScaleType.FIT_CENTER); } public MatrixImageView(Context context) { @@ -51,9 +51,9 @@ public MatrixImageView(Context context) { MatrixTouchListener mListener=new MatrixTouchListener(); setOnTouchListener(mListener); mGestureDetector=new GestureDetector(getContext(), new GestureListener(mListener)); - //Ϊbalck + //背景设置为balck setBackgroundColor(Color.BLACK); - //ΪCENTER_INSIDEʾͼƬʾ,ҿֵΪؼ + //将缩放类型设置为CENTER_INSIDE,表示把图片居中显示,并且宽高最大值为控件宽高 setScaleType(ScaleType.FIT_CENTER); } public void setOnMovingListener(OnMovingListener listener){ @@ -66,7 +66,7 @@ public void setOnSingleTapListener(OnSingleTapListener onSingleTapListener) { public void setImageBitmap(Bitmap bm) { // TODO Auto-generated method stub super.setImageBitmap(bm); - //СΪ0 ʾǰؼСδ ü ڻǰֵ + //大小为0 表示当前控件大小未测量 设置监听函数 在绘制前赋值 if(getWidth()==0){ ViewTreeObserver vto = getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() @@ -74,7 +74,7 @@ public void setImageBitmap(Bitmap bm) { public boolean onPreDraw() { initData(); - //ֵƳü + //赋值结束后,移除该监听函数 MatrixImageView.this.getViewTreeObserver().removeOnPreDrawListener(this); return true; } @@ -85,42 +85,42 @@ public boolean onPreDraw() } /** - * ʼģMatrixͼƬ + * 初始化模板Matrix和图片的其他数据 */ private void initData() { - //ͼƬ󣬻ȡͼƬ任 + //设置完图片后,获取该图片的坐标变换矩阵 mMatrix.set(getImageMatrix()); float[] values=new float[9]; mMatrix.getValues(values); - //ͼƬΪĻȳű + //图片宽度为屏幕宽度除缩放倍数 mImageWidth=getWidth()/values[Matrix.MSCALE_X]; mImageHeight=(getHeight()-values[Matrix.MTRANS_Y]*2)/values[Matrix.MSCALE_Y]; mScale=values[Matrix.MSCALE_X]; } public class MatrixTouchListener implements OnTouchListener{ - /** Ƭģʽ */ + /** 拖拉照片模式 */ private static final int MODE_DRAG = 1; - /** ŴСƬģʽ */ + /** 放大缩小照片模式 */ private static final int MODE_ZOOM = 2; - /** ֧Matrix */ + /** 不支持Matrix */ private static final int MODE_UNABLE=3; - /** ż*/ + /** 最大缩放级别*/ float mMaxScale=6; - /** ˫ʱż*/ + /** 双击时的缩放级别*/ float mDobleClickScale=2; private int mMode = 0;// - /** ſʼʱָ */ + /** 缩放开始时的手指间距 */ private float mStartDis; - /** ǰMatrix*/ + /** 当前Matrix*/ private Matrix mCurrentMatrix = new Matrix(); - /** ڼ¼ʼʱλ */ + /** 用于记录开始时候的坐标位置 */ - /** ViewPagerأжϵǰǷơ */ + /** 和ViewPager交互相关,判断当前是否可以左移、右移 */ boolean mLeftDragable; boolean mRightDragable; - /** Ƿһƶ */ + /** 是否第一次移动 */ boolean mFirstMove=false; private PointF mStartPoint = new PointF(); @Override @@ -128,7 +128,7 @@ public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: - //϶ģʽ + //设置拖动模式 mMode=MODE_DRAG; mStartPoint.set(event.getX(), event.getY()); isMatrixEnable(); @@ -164,21 +164,21 @@ public boolean onTouch(View v, MotionEvent event) { } /** - * ӿؼʼƶ״̬ViewPager޷ضӿؼTouch¼ + * 子控件开始进入移动状态,令ViewPager无法拦截对子控件的Touch事件 */ private void startDrag(){ if(moveListener!=null) moveListener.startDrag(); } /** - * ӿؼʼֹͣƶ״̬ViewPagerضӿؼTouch¼ + * 子控件开始停止移动状态,ViewPager将拦截对子控件的Touch事件 */ private void stopDrag(){ if(moveListener!=null) moveListener.stopDrag(); } /** - * ݵǰͼƬұԵÿק״̬ + * 根据当前图片左右边缘设置可拖拽状态 */ private void checkDragable() { mLeftDragable=true; @@ -186,27 +186,27 @@ private void checkDragable() { mFirstMove=true; float[] values=new float[9]; getImageMatrix().getValues(values); - //ͼƬԵ뿪߽磬ʾ + //图片左边缘离开左边界,表示不可右移 if(values[Matrix.MTRANS_X]>=0) mRightDragable=false; - //ͼƬұԵ뿪ұ߽磬ʾ + //图片右边缘离开右边界,表示不可左移 if((mImageWidth)*values[Matrix.MSCALE_X]+values[Matrix.MTRANS_X]<=getWidth()){ mLeftDragable=false; } } /** - * ק״̬µMatrix + * 设置拖拽状态下的Matrix * @param event */ public void setDragMatrix(MotionEvent event) { if(isZoomChanged()){ - float dx = event.getX() - mStartPoint.x; // õxƶ - float dy = event.getY() - mStartPoint.y; // õxƶ - //˫ͻ,10f϶ + float dx = event.getX() - mStartPoint.x; // 得到x轴的移动距离 + float dy = event.getY() - mStartPoint.y; // 得到x轴的移动距离 + //避免和双击冲突,大于10f才算是拖动 if(Math.sqrt(dx*dx+dy*dy)>10f){ mStartPoint.set(event.getX(), event.getY()); - //ڵǰƶ + //在当前基础上移动 mCurrentMatrix.set(getImageMatrix()); float[] values=new float[9]; mCurrentMatrix.getValues(values); @@ -222,20 +222,20 @@ public void setDragMatrix(MotionEvent event) { } /** - * жżǷǸı - * @return trueʾdzʼֵ,falseʾʼֵ + * 判断缩放级别是否是改变过 + * @return true表示非初始值,false表示初始值 */ private boolean isZoomChanged() { float[] values=new float[9]; getImageMatrix().getValues(values); - //ȡǰXż + //获取当前X轴缩放级别 float scale=values[Matrix.MSCALE_X]; - //ȡģXżȽ + //获取模板的X轴缩放级别,两者做比较 return scale!=mScale; } /** - * ͵ǰԱȣdyʹͼƶ󲻻ᳬImageView߽ + * 和当前矩阵对比,检验dy,使图像移动后不会超出ImageView边界 * @param values * @param dy * @return @@ -252,7 +252,7 @@ else if(values[Matrix.MTRANS_Y]+dy<-(mImageHeight*values[Matrix.MSCALE_Y]-height } /** - * ͵ǰԱȣdxʹͼƶ󲻻ᳬImageView߽ + * 和当前矩阵对比,检验dx,使图像移动后不会超出ImageView边界 * @param values * @param dx * @return @@ -260,14 +260,14 @@ else if(values[Matrix.MTRANS_Y]+dy<-(mImageHeight*values[Matrix.MSCALE_Y]-height private float checkDxBound(float[] values,float dx,float dy) { float width=getWidth(); if(!mLeftDragable&&dx<0){ - //yĶԱȣʾڼֱʱлItem + //加入和y轴的对比,表示在监听到垂直方向的手势时不切换Item if(Math.abs(dx)*0.4f>Math.abs(dy)&&mFirstMove){ stopDrag(); } return 0; } if(!mRightDragable&&dx>0){ - //yĶԱȣʾڼֱʱлItem + //加入和y轴的对比,表示在监听到垂直方向的手势时不切换Item if(Math.abs(dx)*0.4f>Math.abs(dy)&&mFirstMove){ stopDrag(); } @@ -290,17 +290,17 @@ else if(values[Matrix.MTRANS_X]+dx<-(mImageWidth*values[Matrix.MSCALE_X]-width)) } /** - * Matrix + * 设置缩放Matrix * @param event */ private void setZoomMatrix(MotionEvent event) { - //ֻͬʱʱִ + //只有同时触屏两个点的时候才执行 if(event.getPointerCount()<2) return; - float endDis = distance(event);// - if (endDis > 10f) { // ָ£һʱش10 - float scale = endDis / mStartDis;// õű - mStartDis=endDis;//þ - mCurrentMatrix.set(getImageMatrix());//ʼMatrix + float endDis = distance(event);// 结束距离 + if (endDis > 10f) { // 两个手指并拢在一起的时候像素大于10 + float scale = endDis / mStartDis;// 得到缩放倍数 + mStartDis=endDis;//重置距离 + mCurrentMatrix.set(getImageMatrix());//初始化Matrix float[] values=new float[9]; mCurrentMatrix.getValues(values); scale = checkMaxScale(scale, values); @@ -311,29 +311,29 @@ private void setZoomMatrix(MotionEvent event) { } /** - * ȡŵĵ㡣 + * 获取缩放的中心点。 * @param scale * @param values * @return */ private PointF getCenter(float scale,float[] values) { - //żСԭʼżʱΪŴ״̬ʱImageViewĵΪĵ + //缩放级别小于原始缩放级别时或者为放大状态时,返回ImageView中心点作为缩放中心点 if(scale*values[Matrix.MSCALE_X]=1){ return new PointF(getWidth()/2,getHeight()/2); } float cx=getWidth()/2; float cy=getHeight()/2; - //ImageViewĵΪģжźͼƬԵǷ뿪ImageViewԵǵĻԵΪX + //以ImageView中心点为缩放中心,判断缩放后的图片左边缘是否会离开ImageView左边缘,是的话以左边缘为X轴中心 if((getWidth()/2-values[Matrix.MTRANS_X])*scale0){ mZoomSeekBar.setMax(maxZoom); mZoomSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener); } + mWaterMarkImageView.setTag("IMAGE_TAG"); + mWaterMarkImageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + ClipData.Item item = new ClipData.Item((CharSequence)v.getTag()); + + String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN}; +// ClipData d = new ClipData(description, new Item("")); + ClipData dragData = new ClipData(v.getTag().toString(), + mimeTypes, item); + + // Instantiates the drag shadow builder. + View.DragShadowBuilder myShadow = new DragShadowBuilder(mWaterMarkImageView); + + // Starts the drag + v.startDrag(dragData, // the data to be dragged + myShadow, // the drag shadow builder + null, // no need to use local data + 0 // flags (not currently used, set to 0) + ); + return true; + } + }); + } + + /** + * 设置录制视频的尺寸 + * @param quality
{@link CamcorderProfile#QUALITY_480P} + *
{@link CamcorderProfile#QUALITY_720P } + *
{@link CamcorderProfile#QUALITY_1080P} + *
{@link CamcorderProfile#QUALITY_QVGA} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_QCIF} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_CIF} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_480P} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_720P} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_1080P} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_QVGA} + */ + public void setProfile(int quality){ + mCameraView.setProfile(quality); } @@ -164,20 +273,18 @@ public Bitmap stopRecord(){ } /** - * ıģʽ ģʽ¼ģʽл ģʽijʼżͬ - * @param zoom ż + * 改变相机模式 在拍照模式和录像模式间切换 两个模式的初始缩放级别不同 + * @param zoom 缩放级别 */ public void switchMode(int zoom){ mZoomSeekBar.setProgress(zoom); mCameraView.setZoom(zoom); - //ԶԽ + //自动对焦 mCameraView.onFocus(new Point(getWidth()/2, getHeight()/2), autoFocusCallback); - //ˮӡ + //隐藏水印 mWaterMarkImageView.setVisibility(View.GONE); } - - public void setWaterMark(){ if (mWaterMarkImageView.getVisibility()==View.VISIBLE) { mWaterMarkImageView.setVisibility(View.GONE); @@ -187,14 +294,14 @@ public void setWaterMark(){ } /** - * ǰáͷת + * 前置、后置摄像头转换 */ @Override public void switchCamera(){ mCameraView.switchCamera(); } /** - * ȡǰ + * 获取当前闪光灯类型 * @return */ @Override @@ -203,7 +310,7 @@ public FlashMode getFlashMode() { } /** - * + * 设置闪光灯类型 * @param flashMode */ @Override @@ -212,18 +319,39 @@ public void setFlashMode(FlashMode flashMode) { } /** - * ļ· + * 设置文件保存路径 * @param rootPath */ public void setRootPath(String rootPath){ this.mSavePath=rootPath; } - - + /** + * 设置图片保存位置 + * @param imagePath 图位置 + * @param thumbPath 缩略图位置 + */ + public void setSavePath(String imagePath,String thumbPath){ + imgName = FileOperateUtil.createFileNmae(".jpg"); + if(!TextUtils.isEmpty(imagePath)){ + mImageFolder = FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_IMAGE, thumbPath); + this.imagePath = mImageFolder+File.separator + imgName; + } + if(!TextUtils.isEmpty(thumbPath)){ + mThumbnailFolder = FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_THUMBNAIL, thumbPath); + this.thumbPath = mThumbnailFolder + File.separator + imgName; + } + } + /** + * 视频保存路径 + */ + public void setSaveVideoPath(String path){ + mCameraView.setSaveVideoPath(path); + } + /** - * շ + * 拍照方法 * @param callback */ public void takePicture(){ @@ -231,8 +359,8 @@ public void takePicture(){ } /** - * @Description: շ - * @param @param listener ռӿ + * @Description: 拍照方法 + * @param @param listener 拍照监听接口 * @return void * @throws */ @@ -274,7 +402,7 @@ public void onProgressChanged(SeekBar seekBar, int progress, // TODO Auto-generated method stub mCameraView.setZoom(progress); mHandler.removeCallbacksAndMessages(mZoomSeekBar); - //ZOOMģʽ ڽseekbar tokenΪmZoomSeekBarʱƳǰһʱ + //ZOOM模式下 在结束两秒后隐藏seekbar 设置token为mZoomSeekBar用以在连续点击时移除前一个定时任务 mHandler.postAtTime(new Runnable() { @Override @@ -301,101 +429,134 @@ public void onStopTrackingTouch(SeekBar seekBar) { } }; - + /** + * 设置相机的自动对焦,监听 + */ private final AutoFocusCallback autoFocusCallback=new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { - //۽֮ݽ޸ͼƬ + //聚焦之后根据结果修改图片 if (success) { mFocusImageView.onFocusSuccess(); + camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦。 +// camera.startPreview(); }else { - //۽ʧʾͼƬδҵʵԴʾͬһͼƬ + //聚焦失败显示的图片,由于未找到合适的资源,这里仍显示同一张图片 mFocusImageView.onFocusFailed(); } } }; - + /** + * 压缩后的图片最大值 单位KB + * @param maxSize + */ + public void setMaxSize(int maxSize){ + this.maxSize = maxSize; + } + /** + * 调用保存时的监听 + */ private final PictureCallback pictureCallback=new PictureCallback() { @Override - public void onPictureTaken(byte[] data, Camera camera) { + public void onPictureTaken(final byte[] data, Camera camera) { if(mSavePath==null) throw new RuntimeException("mSavePath is null"); - if(mDataHandler==null) mDataHandler=new DataHandler(); - mDataHandler.setMaxSize(200); - Bitmap bm=mDataHandler.save(data); - mTempImageView.setListener(mListener); - mTempImageView.isVideo(false); - mTempImageView.setImageBitmap(bm); - mTempImageView.startAnimation(R.anim.tempview_show); - //´Ԥͼһε׼ + if(mDataHandler==null) mDataHandler=new DataHandler(); + new AsyncTask() { + @Override + protected void onPostExecute(Bitmap bm) { + mTempImageView.setListener(mListener); + mTempImageView.isVideo(false); + mTempImageView.setImageBitmap(bm); + mTempImageView.startAnimation(R.anim.tempview_show); + //重新打开预览图,进行下一次的拍照准备 + + if(mListener!=null) mListener.onTakePictureEnd(bm); + super.onPostExecute(bm); + } + @Override + protected Bitmap doInBackground(Bitmap... params) { + Bitmap bm=mDataHandler.handerSave(data);//添加水印/并保存 + return bm; + } + }.execute(); +// at.execute(Void); camera.startPreview(); - if(mListener!=null) mListener.onTakePictureEnd(bm); +// mTempImageView.setListener(mListener); +// mTempImageView.isVideo(false); +// mTempImageView.setImageBitmap(bm); +// mTempImageView.startAnimation(R.anim.tempview_show); +// //重新打开预览图,进行下一次的拍照准备 +// camera.startPreview(); +// if(mListener!=null) mListener.onTakePictureEnd(bm); } }; + private DisplayMetrics displayMetrics; + private final class TouchListener implements OnTouchListener { - /** ¼ƬģʽǷŴСƬģʽ */ + /** 记录是拖拉照片模式还是放大缩小照片模式 */ private static final int MODE_INIT = 0; - /** ŴСƬģʽ */ + /** 放大缩小照片模式 */ private static final int MODE_ZOOM = 1; - private int mode = MODE_INIT;// ʼ״̬ + private int mode = MODE_INIT;// 初始状态 - /** ڼ¼ͼƬƶλ */ + /** 用于记录拖拉图片移动的坐标位置 */ private float startDis; @Override public boolean onTouch(View v, MotionEvent event) { - /** ͨ㱣λ MotionEvent.ACTION_MASK = 255 */ + /** 通过与运算保留最后八位 MotionEvent.ACTION_MASK = 255 */ switch (event.getAction() & MotionEvent.ACTION_MASK) { - // ָѹĻ + // 手指压下屏幕 case MotionEvent.ACTION_DOWN: mode = MODE_INIT; break; case MotionEvent.ACTION_POINTER_DOWN: - //mZoomSeekBarΪnull ʾ豸֧ ֱmode MoveָҲ޷ִ + //如果mZoomSeekBar为null 表示该设备不支持缩放 直接跳过设置mode Move指令也无法执行 if(mZoomSeekBar==null) return true; - //ƳtokenΪmZoomSeekBarʱ + //移除token对象为mZoomSeekBar的延时任务 mHandler.removeCallbacksAndMessages(mZoomSeekBar); mZoomSeekBar.setVisibility(View.VISIBLE); mode = MODE_ZOOM; - /** ָľ */ + /** 计算两个手指间的距离 */ startDis = distance(event); break; case MotionEvent.ACTION_MOVE: if (mode == MODE_ZOOM) { - //ֻͬʱʱִ + //只有同时触屏两个点的时候才执行 if(event.getPointerCount()<2) return true; - float endDis = distance(event);// - //ÿ仯10f zoom1 + float endDis = distance(event);// 结束距离 + //每变化10f zoom变1 int scale=(int) ((endDis-startDis)/10f); if(scale>=1||scale<=-1){ int zoom=mCameraView.getZoom()+scale; - //zoomܳΧ + //zoom不能超出范围 if(zoom>mCameraView.getMaxZoom()) zoom=mCameraView.getMaxZoom(); if(zoom<0) zoom=0; mCameraView.setZoom(zoom); mZoomSeekBar.setProgress(zoom); - //һεľΪǰ + //将最后一次的距离设为当前距离 startDis=endDis; } } break; - // ָ뿪Ļ + // 手指离开屏幕 case MotionEvent.ACTION_UP: if(mode!=MODE_ZOOM){ - //þ۽ + //设置聚焦 Point point=new Point((int)event.getX(), (int)event.getY()); mCameraView.onFocus(point,autoFocusCallback); mFocusImageView.startFocus(point); }else { - //ZOOMģʽ ڽseekbar tokenΪmZoomSeekBarʱƳǰһʱ + //ZOOM模式下 在结束两秒后隐藏seekbar 设置token为mZoomSeekBar用以在连续点击时移除前一个定时任务 mHandler.postAtTime(new Runnable() { @Override @@ -409,32 +570,36 @@ public void run() { } return true; } - /** ָľ */ + /** 计算两个手指间的距离 */ private float distance(MotionEvent event) { float dx = event.getX(1) - event.getX(0); float dy = event.getY(1) - event.getY(0); - /** ʹùɶ֮ľ */ + /** 使用勾股定理返回两点之间的距离 */ return (float) Math.sqrt(dx * dx + dy * dy); } } - + /** 压缩后的图片最大值 单位KB*/ + private int maxSize=200; /** - * շصbyteݴ + * 拍照返回的byte数据处理类 * @author linj * */ - private final class DataHandler{ - /** ͼ· */ - private String mThumbnailFolder; - /** Сͼ· */ - private String mImageFolder; - /** ѹͼƬֵ λKB*/ - private int maxSize=200; + /** 大图存放路径 */ + private String mThumbnailFolder; + /** 小图存放路径 */ + private String mImageFolder; + private String imgName; + + private String imagePath; + + private String thumbPath; + private final class DataHandler{ + public DataHandler(){ - mImageFolder=FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_IMAGE, mSavePath); - mThumbnailFolder=FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_THUMBNAIL, mSavePath); + File folder=new File(mImageFolder); if(!folder.exists()){ folder.mkdirs(); @@ -446,33 +611,35 @@ public DataHandler(){ } /** - * ͼƬ - * @param صļ - * @return ɵͼ + * 保存图片 + * @param 相机返回的文件流 + * @return 解析流生成的缩略图 */ - public Bitmap save(byte[] data){ + public Bitmap handerSave(byte[] data){ if(data!=null){ - //صͼƬ + //解析生成相机返回的图片 Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length); - //ȡˮӡͼƬ +// Matrix m = new Matrix(); +// m.setRotate(bitmepRotateAngle, bm.getWidth(), bm.getHeight()); +// bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true); + //获取加水印的图片 bm=getBitmapWithWaterMark(bm); - //ͼ + //生成缩略图 Bitmap thumbnail=ThumbnailUtils.extractThumbnail(bm, 213, 213); - //µļ - String imgName=FileOperateUtil.createFileNmae(".jpg"); - String imagePath=mImageFolder+File.separator+imgName; - String thumbPath=mThumbnailFolder+File.separator+imgName; + //产生新的文件名 + File file=new File(imagePath); File thumFile=new File(thumbPath); try{ - //ͼƬͼ + //存图片大图 FileOutputStream fos=new FileOutputStream(file); - ByteArrayOutputStream bos=compress(bm); + ByteArrayOutputStream bos=compress(bm);//压缩要保存的图片 fos.write(bos.toByteArray()); fos.flush(); fos.close(); - //ͼƬСͼ + Log.w(TAG, "bitmap--> path:"+imagePath+" fileSize: "+maxSize); + //存图片小图 BufferedOutputStream bufferos=new BufferedOutputStream(new FileOutputStream(thumFile)); thumbnail.compress(Bitmap.CompressFormat.JPEG, 50, bufferos); bufferos.flush(); @@ -480,20 +647,28 @@ public Bitmap save(byte[] data){ return bm; }catch(Exception e){ Log.e(TAG, e.toString()); - Toast.makeText(getContext(), "ʧ", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "解析相机返回流失败", Toast.LENGTH_SHORT).show(); } }else{ - Toast.makeText(getContext(), "ʧܣ", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "拍照失败,请重试", Toast.LENGTH_SHORT).show(); } return null; } - + /** + * 设置上水印 + * @param bm + * @return + */ private Bitmap getBitmapWithWaterMark(Bitmap bm) { // TODO Auto-generated method stub if(!(mWaterMarkImageView.getVisibility()==View.VISIBLE)){ return bm; } + //计算图片和屏幕的比例 + int zoom = displayMetrics.widthPixels/bm.getWidth(); + + Drawable mark=mWaterMarkImageView.getDrawable(); Bitmap wBitmap=drawableToBitmap(mark); int w = bm.getWidth(); @@ -504,18 +679,31 @@ private Bitmap getBitmapWithWaterMark(Bitmap bm) { int wh = wBitmap.getHeight(); Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 ); + Matrix matrix = new Matrix(); + + Bitmap b = Bitmap.createBitmap( w/zoom, h/zoom, Config.ARGB_8888 ); + wBitmap = Bitmap.createBitmap(wBitmap, 0, 0, mWaterMarkImageView.getWidth(), mWaterMarkImageView.getHeight()); Canvas canvas=new Canvas(newb); //draw src into - canvas.drawBitmap( bm, 0, 0, null );// 00꿪ʼsrc - canvas.drawBitmap( wBitmap, w - ww + 5, h - wh + 5, null );//src½ǻˮӡ + canvas.drawBitmap( bm, 0, 0, null );//在 0,0坐标开始画入src + wBitmap = ThumbnailUtils.extractThumbnail(wBitmap, w/zoom, h/zoom,ThumbnailUtils.OPTIONS_RECYCLE_INPUT); + +// canvas.drawBitmap( wBitmap, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印 + float x2 = mWaterMarkImageView.getX(); + float y2 = mWaterMarkImageView.getY(); + System.out.println(x2); + System.out.println(y2); + System.out.println(b.getWidth()); + canvas.drawBitmap( wBitmap, 0, 0, null );//在src的右下角画入水印 +// canvas.drawBitmap( wBitmap, 0, 0, null );//在src的右下角画入水印 //save all clip - canvas.save( Canvas.ALL_SAVE_FLAG );// + canvas.save( Canvas.ALL_SAVE_FLAG );//保存 //store - canvas.restore();//洢 + canvas.restore();//存储 bm.recycle(); bm=null; wBitmap.recycle(); @@ -535,58 +723,55 @@ public Bitmap drawableToBitmap(Drawable drawable) { return bitmap; } /** - * ͼƬѹ - * @param bitmap ͼƬļ - * @param max ļСֵ - * @return ѹֽ + * 图片压缩方法 + * @param bitmap 图片文件 + * @param max 文件大小最大值 + * @return 压缩后的字节流 * @throws Exception */ public ByteArrayOutputStream compress(Bitmap bitmap){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);// ѹ100ʾѹѹݴŵbaos + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 99; - while ( baos.toByteArray().length / 1024 > maxSize) { // ѭжѹͼƬǷ100kb,ڼѹ - options -= 3;// ÿζ10 - //ѹС0ѹ + while ( baos.toByteArray().length / 1024 > maxSize) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩 + options -= 3;// 每次都减少10 + //压缩比小于0,不再压缩 if (options<0) { break; } Log.i(TAG,baos.toByteArray().length / 1024+""); - baos.reset();// baosbaos - bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);// ѹoptions%ѹݴŵbaos + baos.reset();// 重置baos即清空baos + bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中 } return baos; } - public void setMaxSize(int maxSize) { - this.maxSize = maxSize; - } } /** * @ClassName: TakePictureListener - * @Description: ռӿڣտʼͽִӦ + * @Description: 拍照监听接口,用以在拍照开始和结束后执行相应操作 * @author LinJ - * @date 2014-12-31 9:50:33 + * @date 2014-12-31 上午9:50:33 * */ public static interface TakePictureListener{ /** - *սִеĶ÷onPictureTakenִк󴥷 - * @param bm ɵͼƬ + *拍照结束执行的动作,该方法会在onPictureTaken函数执行后触发 + * @param bm 拍照生成的图片 */ public void onTakePictureEnd(Bitmap bm); - /** ʱͼƬ󴥷 - * @param bm ɵͼƬ - * @param isVideo trueǰΪ¼ͼ false:Ϊͼ + /** 临时图片动画结束后触发 + * @param bm 拍照生成的图片 + * @param isVideo true:当前为录像缩略图 false:为拍照缩略图 * */ public void onAnimtionEnd(Bitmap bm,boolean isVideo); } /** - * dipתpx + * dip转px * @param dipValue * @return */ diff --git a/CameraLibrary/src/com/linj/camera/view/CameraOperation.java b/CameraLibrary/src/com/linj/camera/view/CameraOperation.java index 84b23c4..4bf42ab 100644 --- a/CameraLibrary/src/com/linj/camera/view/CameraOperation.java +++ b/CameraLibrary/src/com/linj/camera/view/CameraOperation.java @@ -8,55 +8,55 @@ /** * @ClassName: CameraOperation - * @Description:ӿڣͳһCameraContainerCameraViewĹ + * @Description:相机操作接口,用以统一CameraContainer和CameraView的功能 * @author LinJ - * @date 2015-1-26 2:41:31 + * @date 2015-1-26 下午2:41:31 * */ public interface CameraOperation { /** - * ʼ¼ - * @return Ƿɹʼ¼ + * 开始录像 + * @return 是否成功开始录像 */ public boolean startRecord(); /** - * ֹͣ¼ - * @return ¼ͼ + * 停止录像 + * @return 录像缩略图 */ public Bitmap stopRecord(); /** - * лǰúͺ + * 切换前置和后置相机 */ public void switchCamera(); /** - * ȡǰģʽ + * 获取当前闪光灯模式 * @return */ public FlashMode getFlashMode(); /** - * ģʽ + * 设置闪光灯模式 * @param flashMode */ public void setFlashMode(FlashMode flashMode); /** - * - * @param callback ջص - * @param listener ն + * 拍照 + * @param callback 拍照回调函数 + * @param listener 拍照动作监听函数 */ public void takePicture(PictureCallback callback,TakePictureListener listener); /** - * ż + * 相机最大缩放级别 * @return */ public int getMaxZoom(); /** - * õǰż + * 设置当前缩放级别 * @param zoom */ public void setZoom(int zoom); /** - * ȡǰż + * 获取当前缩放级别 * @return */ public int getZoom(); diff --git a/CameraLibrary/src/com/linj/camera/view/CameraView.java b/CameraLibrary/src/com/linj/camera/view/CameraView.java index 88a7d2a..9b36a99 100644 --- a/CameraLibrary/src/com/linj/camera/view/CameraView.java +++ b/CameraLibrary/src/com/linj/camera/view/CameraView.java @@ -6,80 +6,69 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import com.linj.cameralibrary.R; -import com.linj.FileOperateUtil; -import com.linj.camera.view.CameraContainer.TakePictureListener; - -import android.R.integer; import android.content.Context; -import android.content.res.Configuration; import android.graphics.Bitmap; -import android.graphics.ImageFormat; -import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.hardware.Camera; import android.hardware.Camera.Area; import android.hardware.Camera.AutoFocusCallback; import android.hardware.Camera.CameraInfo; -import android.hardware.Camera.Parameters; import android.hardware.Camera.PictureCallback; -import android.hardware.Camera.Size; import android.media.CamcorderProfile; import android.media.MediaMetadataRetriever; import android.media.MediaRecorder; -import android.media.ThumbnailUtils; -import android.media.MediaRecorder.OnInfoListener; -import android.net.Uri; -import android.os.Handler; -import android.provider.MediaStore.Video.Thumbnails; import android.util.AttributeSet; import android.util.Log; -import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.OrientationEventListener; -import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; -import android.view.View; import android.widget.Toast; +import com.linj.FileOperateUtil; +import com.linj.camera.view.CameraContainer.TakePictureListener; + /** * @ClassName: CameraView - * @Description: 󶨵SurfaceView װշ + * @Description: 和相机绑定的SurfaceView 封装了拍照方法 * @author LinJ - * @date 2014-12-31 9:44:56 + * @date 2014-12-31 上午9:44:56 * */ public class CameraView extends SurfaceView implements CameraOperation{ public final static String TAG="CameraView"; - /** ͸View󶨵Camera */ + /** 和该View绑定的Camera对象 */ private Camera mCamera; - /** ǰͣĬΪر */ - private FlashMode mFlashMode=FlashMode.ON; + /** 当前闪光灯类型,默认为关闭 */ + private FlashMode mFlashMode=FlashMode.AUTO; - /** ǰż ĬΪ0*/ + /** 当前缩放级别 默认为0*/ private int mZoom=0; - /** ǰĻתǶ*/ + /** 当前屏幕旋转角度*/ private int mOrientation=0; - /** Ƿǰ,trueΪǰ,falseΪ */ + /** 是否打开前置相机,true为前置,false为后置 */ private boolean mIsFrontCamera; - /** ¼ */ + /** 录像类 */ private MediaRecorder mMediaRecorder; - /** ã¼ǰ¼¼ָԭ */ + /** 相机配置,在录像前记录,用以录像结束后恢复原配置 */ private Camera.Parameters mParameters; - /** ¼· ͼ*/ + /** 录像存放路径 ,用以生成缩略图*/ private String mRecordPath=null; + /** 设置默认自动对焦 */ + private AutoFocusCallback autoFocus; + /** 录视频保存路径 */ + private String videoSavePath; + /** 录视频时的尺寸 */ + private int videoMode = CamcorderProfile.QUALITY_1080P; public CameraView(Context context){ super(context); - //ʼ + //初始化容器 getHolder().addCallback(callback); openCamera(); mIsFrontCamera=false; @@ -87,7 +76,7 @@ public CameraView(Context context){ public CameraView(Context context, AttributeSet attrs) { super(context, attrs); - //ʼ + //初始化容器 getHolder().addCallback(callback); openCamera(); mIsFrontCamera=false; @@ -104,21 +93,24 @@ public void surfaceCreated(SurfaceHolder holder) { setCameraParameters(); mCamera.setPreviewDisplay(getHolder()); } catch (Exception e) { - Toast.makeText(getContext(), "ʧ", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "打开相机失败", Toast.LENGTH_SHORT).show(); Log.e(TAG,e.getMessage()); } mCamera.startPreview(); + mCamera.cancelAutoFocus(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + mCamera.autoFocus(autoFocus); + setCameraParameters(); updateCameraOrientation(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { - //ֹͣ¼ + //停止录像 stopRecord(); if (mCamera != null) { mCamera.stopPreview(); @@ -132,10 +124,26 @@ public void surfaceDestroyed(SurfaceHolder holder) { protected boolean isRecording(){ return mMediaRecorder!=null; } - + /** + * + * @param quality
{@link CamcorderProfile#QUALITY_480P} + *
{@link CamcorderProfile#QUALITY_720P } + *
{@link CamcorderProfile#QUALITY_1080P} + *
{@link CamcorderProfile#QUALITY_QVGA} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_QCIF} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_CIF} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_480P} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_720P} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_1080P} + *
{@link CamcorderProfile#QUALITY_TIME_LAPSE_QVGA} + */ + public void setProfile(int quality){ + this.videoMode = quality; + } + /** - * ʼ¼ - * @return ʼ¼Ƿɹ + * 开始录像 + * @return 开始录像是否成功 */ @Override public boolean startRecord(){ @@ -155,11 +163,11 @@ public boolean startRecord(){ .setVideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder .setAudioSource(MediaRecorder.AudioSource.MIC); - //¼ӦҪ˴ȡһСʽƵ - mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P)); - //Ƶ򣬱ڲʶ¼ƣҪת90 + //设置录像参数,由于应用需要此处取一个较小格式的视频 + mMediaRecorder.setProfile(CamcorderProfile.get(videoMode)); + //设置输出视频朝向,便于播放器识别。由于是竖屏录制,需要正转90° mMediaRecorder.setOrientationHint(90); - String path=FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_VIDEO, "test"); + String path=FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_VIDEO, videoSavePath); File directory=new File(path); if(!directory.exists()) directory.mkdirs(); @@ -171,7 +179,9 @@ public boolean startRecord(){ .getAbsolutePath()); mMediaRecorder.prepare(); mMediaRecorder.start(); + Log.w(TAG, "video path"+mRecordPath); } catch (Exception e) { + e.printStackTrace(); return false; } return true; @@ -179,6 +189,7 @@ public boolean startRecord(){ @Override public Bitmap stopRecord(){ + Log.w(TAG, "video stopRecord"+mRecordPath); Bitmap bitmap=null; try { if(mMediaRecorder!=null){ @@ -186,17 +197,17 @@ public Bitmap stopRecord(){ mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder=null; - //Ƶͼ + //保存视频的缩略图 bitmap=saveThumbnail(); } if(mParameters!=null&&mCamera!=null){ - // + //重新连接相机 mCamera.reconnect(); - //ֹͣԤעȵֹͣԤòЧ + //停止预览,注意这里必须先调用停止预览再设置参数才有效 mCamera.stopPreview(); - //òΪ¼ǰIJȻ¼ǵ䣬¼ƺԤЧǵ仭 + //设置参数为录像前的参数,不然如果录像是低配,结束录制后预览效果还是低配画面 mCamera.setParameters(mParameters); - //´ + //重新打开 mCamera.startPreview(); mParameters=null; } @@ -209,19 +220,19 @@ public Bitmap stopRecord(){ private Bitmap saveThumbnail() throws FileNotFoundException, IOException { if(mRecordPath!=null){ - //ͼ,÷ֻܻȡ384X512ͼʹԴеĻȡͼ + //创建缩略图,该方法只能获取384X512的缩略图,舍弃,使用源码中的获取缩略图方法 // Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(mRecordPath, Thumbnails.MINI_KIND); Bitmap bitmap=getVideoThumbnail(mRecordPath); if(bitmap!=null){ - String mThumbnailFolder=FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_THUMBNAIL, "test"); + String mThumbnailFolder=FileOperateUtil.getFolderPath(getContext(), FileOperateUtil.TYPE_THUMBNAIL, videoSavePath); File folder=new File(mThumbnailFolder); if(!folder.exists()){ folder.mkdirs(); } File file=new File(mRecordPath); file=new File(folder+File.separator+file.getName().replace("3gp", "jpg")); - //ͼƬСͼ + //存图片小图 BufferedOutputStream bufferos=new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.JPEG,100, bufferos); bufferos.flush(); @@ -234,7 +245,7 @@ private Bitmap saveThumbnail() throws FileNotFoundException, IOException { } /** - * ȡ֡ͼĸ߿ + * 获取帧缩略图,根据容器的高宽进行缩放 * @param filePath * @return */ @@ -265,10 +276,10 @@ public Bitmap getVideoThumbnail(String filePath) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); Log.i(TAG, "bitmap:"+width+" "+height); - int pWidth=getWidth();// - int pHeight=getHeight();//߶ + int pWidth=getWidth();// 容器宽度 + int pHeight=getHeight();//容器高度 Log.i(TAG, "parent:"+pWidth+" "+pHeight); - //ȡ߸ȽСıԴΪ׼ + //获取宽高跟容器宽高相比较小的倍数,以此为标准进行缩放 float scale = Math.min((float)width/pWidth, (float)height/pHeight); Log.i(TAG, scale+""); int w = Math.round(scale * pWidth); @@ -279,7 +290,7 @@ public Bitmap getVideoThumbnail(String filePath) { } /** - * תǰúͺ + * 转换前置和后置照相机 */ @Override public void switchCamera(){ @@ -299,7 +310,7 @@ public void switchCamera(){ } /** - * ݵǰ״̬(ǰû)򿪶Ӧ + * 根据当前照相机状态(前置或后置),打开对应相机 */ private boolean openCamera() { if (mCamera != null) { @@ -307,7 +318,6 @@ private boolean openCamera() { mCamera.release(); mCamera = null; } - if(mIsFrontCamera){ Camera.CameraInfo cameraInfo=new CameraInfo(); for (int i = 0; i < Camera.getNumberOfCameras(); i++) { @@ -335,7 +345,7 @@ private boolean openCamera() { } /** - * ȡǰ + * 获取当前闪光灯类型 * @return */ @Override @@ -344,7 +354,7 @@ public FlashMode getFlashMode() { } /** - * + * 设置闪光灯类型 * @param flashMode */ @Override @@ -374,12 +384,13 @@ public void takePicture(PictureCallback callback,TakePictureListener listener){ } /** - * ֶ۽ - * @param point + * 手动聚焦 + * @param point 触屏坐标 */ protected void onFocus(Point point,AutoFocusCallback callback){ + this.autoFocus = callback; Camera.Parameters parameters=mCamera.getParameters(); - //֧Զ۽ʹԶ۽ + //不支持设置自定义聚焦,则使用自动聚焦,返回 if (parameters.getMaxNumFocusAreas()<=0) { mCamera.autoFocus(callback); return; @@ -396,8 +407,8 @@ protected void onFocus(Point point,AutoFocusCallback callback){ areas.add(new Area(new Rect(left,top,right,bottom), 100)); parameters.setFocusAreas(areas); try { - //ʹõСֻþ۽ʱ򾭳쳣־ǿַܲתintʱˣ - //ĿС޸˿ܲ뵼£ڴtryʵʾ۽ЧûӰ + //本人使用的小米手机在设置聚焦区域的时候经常会出异常,看日志发现是框架层的字符串转int的时候出错了, + //目测是小米修改了框架层代码导致,在此try掉,对实际聚焦效果没影响 mCamera.setParameters(parameters); } catch (Exception e) { // TODO: handle exception @@ -407,7 +418,7 @@ protected void onFocus(Point point,AutoFocusCallback callback){ } /** - * ȡżΪ40 + * 获取最大缩放级别,最大为40 * @return */ @Override @@ -418,15 +429,15 @@ public int getMaxZoom(){ return parameters.getMaxZoom()>40?40:parameters.getMaxZoom(); } /** - * ż + * 设置相机缩放级别 * @param zoom */ @Override public void setZoom(int zoom){ if(mCamera==null) return; Camera.Parameters parameters; - //ע˴Ϊ¼ģʽµsetZoomʽCamera.unlock֮󣬵getParametersandroidܵײ쳣 - //stackoverflowϿĽڶ߳ͬʱCameraµijͻڴʹ¼ǰmParameters + //注意此处为录像模式下的setZoom方式。在Camera.unlock之后,调用getParameters方法会引起android框架底层的异常 + //stackoverflow上看到的解释是由于多线程同时访问Camera导致的冲突,所以在此使用录像前保存的mParameters。 if(mParameters!=null) parameters=mParameters; else { @@ -444,48 +455,52 @@ public int getZoom(){ } /** - * + * 设置照相机参数 */ private void setCameraParameters(){ Camera.Parameters parameters = mCamera.getParameters(); - // ѡʵԤߴ - List sizeList = parameters.getSupportedPreviewSizes(); - if (sizeList.size()>0) { - Size cameraSize=sizeList.get(0); - //ԤͼƬС - parameters.setPreviewSize(cameraSize.width, cameraSize.height); - } - - //ɵͼƬС - sizeList = parameters.getSupportedPictureSizes(); - if (sizeList.size()>0) { - Size cameraSize=sizeList.get(0); - for (Size size : sizeList) { - //С100W - if (size.width*size.height<100*10000) { - cameraSize=size; - break; - } - } - parameters.setPictureSize(cameraSize.width, cameraSize.height); + // 选择合适的预览尺寸 +// List sizeList = parameters.getSupportedPreviewSizes(); +// if (sizeList.size()>0) { +// Size cameraSize=sizeList.get(0); +// //预览图片大小 +// parameters.setPreviewSize(cameraSize.width, cameraSize.height); +// } +// +// //设置生成的图片大小 +// sizeList = parameters.getSupportedPictureSizes(); +// if (sizeList.size()>0) { +// Size cameraSize=sizeList.get(0); +// for (Size size : sizeList) { +// //小于100W像素 +// if (size.width*size.height<100*10000) { +// cameraSize=size; +// break; +// } +// } +// parameters.setPictureSize(cameraSize.width, cameraSize.height); +// } +// //设置图片格式 +// parameters.setPictureFormat(ImageFormat.JPEG); +// parameters.setJpegQuality(100); +// parameters.setJpegThumbnailQuality(100); +// //自动聚焦模式 + if(mIsFrontCamera){ + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); + }else{ + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//前摄像头会崩溃 } - //ͼƬʽ - parameters.setPictureFormat(ImageFormat.JPEG); - parameters.setJpegQuality(100); - parameters.setJpegThumbnailQuality(100); - //Զ۽ģʽ - parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); mCamera.setParameters(parameters); - //ģʽ˴Ҫݻٺؽ֮ǰ״̬ - setFlashMode(mFlashMode); - //ż + //设置闪光灯模式。此处主要是用于在相机摧毁后又重建,保持之前的状态 +// setFlashMode(mFlashMode); + //设置缩放级别 setZoom(mZoom); - //Ļ + //开启屏幕朝向监听 startOrientationChangeListener(); } /** - * Ļı Ļлʱı䱣ͼƬķ + * 启动屏幕朝向改变监听函数 用于在屏幕横竖屏切换时改变保存的图片的方向 */ private void startOrientationChangeListener() { OrientationEventListener mOrEventListener = new OrientationEventListener(getContext()) { @@ -515,36 +530,50 @@ else if((rotation > 225) && (rotation <= 315)) { } /** - * ݵǰ޸ıͼƬתǶ + * 根据当前朝向修改保存图片的旋转角度 */ private void updateCameraOrientation(){ if(mCamera!=null){ Camera.Parameters parameters = mCamera.getParameters(); - //rotationΪ 090180270ˮƽΪ0 + //rotation参数为 0、90、180、270。水平方向为0。 int rotation=90+mOrientation==360?0:90+mOrientation; - //ǰͷҪԴֱ任Ƭǵߵ + //前置摄像头需要对垂直方向做变换,否则照片是颠倒的 if(mIsFrontCamera){ if(rotation==90) rotation=270; else if (rotation==270) rotation=90; } - parameters.setRotation(rotation);//ɵͼƬת90 - //ԤͼƬת90 - mCamera.setDisplayOrientation(90);//Ԥת90 + parameters.setRotation(rotation);//生成的图片转90° + //预览图片旋转90° + mCamera.setDisplayOrientation(90);//预览转90° mCamera.setParameters(parameters); } } /** - * @Description: ö ĬΪر + * @Description: 闪光灯类型枚举 默认为关闭 */ public enum FlashMode{ - /** ON:ʱ */ + /** ON:拍照时打开闪光灯 */ ON, - /** OFF */ + /** OFF:不打开闪光灯 */ OFF, - /** AUTOϵͳǷ */ + /** AUTO:系统决定是否打开闪光灯 */ AUTO, - /** TORCHһֱ */ + /** TORCH:一直打开闪光灯 */ TORCH } + + public void setAutoFocus(AutoFocusCallback autoFocusCallback) { + this.autoFocus = autoFocusCallback; + + } + /** + * 设置视频保存路径 + * @param videoSavePath + */ + public void setSaveVideoPath(String videoSavePath) { + this.videoSavePath = videoSavePath; + } + + } \ No newline at end of file diff --git a/CameraLibrary/src/com/linj/camera/view/FocusImageView.java b/CameraLibrary/src/com/linj/camera/view/FocusImageView.java index b9340fd..3332f4b 100644 --- a/CameraLibrary/src/com/linj/camera/view/FocusImageView.java +++ b/CameraLibrary/src/com/linj/camera/view/FocusImageView.java @@ -2,29 +2,25 @@ -import com.linj.cameralibrary.R; - import android.content.Context; import android.content.res.TypedArray; import android.graphics.Point; import android.os.Handler; -import android.os.SystemClock; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.view.View; -import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; -import android.view.animation.Animation.AnimationListener; -import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.FrameLayout.LayoutParams; import android.widget.RelativeLayout; +import com.linj.cameralibrary.R; + /** * @ClassName: FocusImageView - * @Description:۽ʱʾImagView + * @Description:聚焦时显示的ImagView * @author LinJ - * @date 2015-1-4 2:55:34 + * @date 2015-1-4 下午2:55:34 * */ public class FocusImageView extends ImageView { @@ -53,29 +49,29 @@ public FocusImageView(Context context, AttributeSet attrs) { mFocusFailedImg=a.getResourceId(R.styleable.FocusImageView_focus_fail_id, NO_ID); a.recycle(); - //۽ͼƬΪ + //聚焦图片不能为空 if (mFocusImg==NO_ID||mFocusSucceedImg==NO_ID||mFocusFailedImg==NO_ID) throw new RuntimeException("Animation is null"); } /** - * ʾ۽ͼ - * @param x x - * @param y y + * 显示聚焦图案 + * @param x 触屏的x坐标 + * @param y 触屏的y坐标 */ public void startFocus(Point point){ if (mFocusImg==NO_ID||mFocusSucceedImg==NO_ID||mFocusFailedImg==NO_ID) throw new RuntimeException("focus image is null"); - //ݴþ۽ͼλ + //根据触摸的坐标设置聚焦图案的位置 RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) getLayoutParams(); params.topMargin= point.y-getHeight()/2; params.leftMargin=point.x-getWidth()/2; setLayoutParams(params); - //ÿؼɼʼ + //设置控件可见,并开始动画 setVisibility(View.VISIBLE); setImageResource(mFocusImg); startAnimation(mAnimation); - //3Viewڴ˴ڿܾ۽¼ܲ + //3秒后隐藏View。在此处设置是由于可能聚焦事件可能不触发。 mHandler.postDelayed(new Runnable() { @Override public void run() { @@ -86,11 +82,18 @@ public void run() { } /** - * ۽ɹص + * 聚焦成功回调 */ public void onFocusSuccess(){ + RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) getLayoutParams(); + if(params.topMargin==0&¶ms.leftMargin==0){ + DisplayMetrics metrics = getResources().getDisplayMetrics(); + params.topMargin= metrics.heightPixels/2-getHeight()/2; + params.leftMargin=metrics.widthPixels/2-getWidth()/2; + setLayoutParams(params); + } setImageResource(mFocusSucceedImg); - //ƳstartFocusõcallback1ظÿؼ + //移除在startFocus中设置的callback,1秒后隐藏该控件 mHandler.removeCallbacks(null, null); mHandler.postDelayed(new Runnable() { @Override @@ -103,11 +106,18 @@ public void run() { } /** - * ۽ʧܻص + * 聚焦失败回调 */ public void onFocusFailed(){ + RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) getLayoutParams(); + if(params.topMargin==0&¶ms.leftMargin==0){ + DisplayMetrics metrics = getResources().getDisplayMetrics(); + params.topMargin= metrics.heightPixels/2-getHeight()/2; + params.leftMargin=metrics.widthPixels/2-getWidth()/2; + setLayoutParams(params); + } setImageResource(mFocusFailedImg); - //ƳstartFocusõcallback1ظÿؼ + //移除在startFocus中设置的callback,1秒后隐藏该控件 mHandler.removeCallbacks(null, null); mHandler.postDelayed(new Runnable() { @Override @@ -119,7 +129,7 @@ public void run() { } /** - * ÿʼ۽ʱͼƬ + * 设置开始聚焦时的图片 * @param focus */ public void setFocusImg(int focus) { @@ -127,7 +137,7 @@ public void setFocusImg(int focus) { } /** - * þ۽ɹʾͼƬ + * 设置聚焦成功显示的图片 * @param focusSucceed */ public void setFocusSucceedImg(int focusSucceed) { diff --git a/CameraLibrary/src/com/linj/camera/view/TempImageView.java b/CameraLibrary/src/com/linj/camera/view/TempImageView.java index 7bc5a5c..fe3774e 100644 --- a/CameraLibrary/src/com/linj/camera/view/TempImageView.java +++ b/CameraLibrary/src/com/linj/camera/view/TempImageView.java @@ -19,9 +19,9 @@ /** * @ClassName: TempImageView - * @Description: ʱImageViewִһԶ + * @Description: 临时ImageView,在执行完一个动画后自动隐藏 * @author LinJ - * @date 2014-12-31 9:45:34 + * @date 2014-12-31 上午9:45:34 * */ public class TempImageView extends ImageView implements AnimationListener{ @@ -29,15 +29,15 @@ public class TempImageView extends ImageView implements AnimationListener{ public final static String TAG="TempImageView"; /** - * ڵĶID + * 不存在的动画ID */ public static final int NO_ID=-1; /** - * õĶЧID + * 设置的动画效果ID */ private int mAnimationID=NO_ID; - /** նӿ */ + /** 拍照动作监听接口 */ private TakePictureListener mListener; private boolean mIsVideo; @@ -67,7 +67,7 @@ public void onAnimationEnd(Animation animation) { Bitmap bm = null; if(drawable!=null&&drawable instanceof BitmapDrawable) bm=((BitmapDrawable)drawable).getBitmap(); - //ӿڲΪգִս + //相机监听接口不为空,则执行拍照结束操作 if (mListener!=null) mListener.onAnimtionEnd(bm,mIsVideo); } @@ -79,7 +79,7 @@ public void onAnimationRepeat(Animation animation) { /** - * @Description: ʼ + * @Description: 开始动画 * @param * @return void * @throws @@ -90,8 +90,8 @@ public void startAnimation(){ /** - * @Description: ʼ - * @param @param resourceID ԴID + * @Description: 开始动画 + * @param @param resourceID 动画资源的ID * @return void * @throws */ diff --git a/CameraLibrary/src/com/linj/imageloader/DisplayImageOptions.java b/CameraLibrary/src/com/linj/imageloader/DisplayImageOptions.java index c4bd0d0..b5ea8ac 100644 --- a/CameraLibrary/src/com/linj/imageloader/DisplayImageOptions.java +++ b/CameraLibrary/src/com/linj/imageloader/DisplayImageOptions.java @@ -5,9 +5,9 @@ /** * @ClassName: DisplayImageOptions -* @Description: ͼƬز +* @Description: 图片加载参数 * @author LinJ -* @date 2015-1-8 9:47:04 +* @date 2015-1-8 上午9:47:04 * */ public class DisplayImageOptions { @@ -36,8 +36,8 @@ public static class Builder{ private BitmapDisplayer displayer; private boolean fromNet; /** - * ͼƬʾͼƬ - * @param imageRes ͼƬID + * 设置 加载图片中显示的图片 + * @param imageRes 图片ID * @return */ public Builder showImageOnLoading(int imageRes) { @@ -45,8 +45,8 @@ public Builder showImageOnLoading(int imageRes) { return this; } /** - * üͼƬʧʾͼƬ - * @param imageRes ͼƬID + * 设置加载图片失败显示的图片 + * @param imageRes 图片ID * @return */ public Builder showImageOnFail(int imageRes) { @@ -54,7 +54,7 @@ public Builder showImageOnFail(int imageRes) { return this; } /** - * Ƿڴл + * 设置是否在内存中缓存 * @param cacheInMemory * @return */ @@ -63,7 +63,7 @@ public Builder cacheInMemory(boolean cacheInMemory) { return this; } /** - * Ƿsdϻ + * 设置是否在sd卡上缓存 * @param cacheOnDisk * @return */ @@ -72,7 +72,7 @@ public Builder cacheOnDisk(boolean cacheOnDisk) { return this; } /** - * ͼƬʾ + * 图片显示器 * @param displayer * @return */ @@ -82,7 +82,7 @@ public Builder displayer(BitmapDisplayer displayer) { return this; } /** - * ǷͼƬ + * 设置是否加载网络图片 * @param fromNet * @return */ @@ -91,11 +91,11 @@ public Builder setFromNet(boolean fromNet) { return this; } /** - * DisplayImageOptions + * 创建DisplayImageOptions对象 * @return */ public DisplayImageOptions build() { - //builderֶεķǿж + //在这里做builder所有字段的非空判断 return new DisplayImageOptions(this); } diff --git a/CameraLibrary/src/com/linj/imageloader/DownloadImgUtils.java b/CameraLibrary/src/com/linj/imageloader/DownloadImgUtils.java index 5cbeb86..5556f12 100644 --- a/CameraLibrary/src/com/linj/imageloader/DownloadImgUtils.java +++ b/CameraLibrary/src/com/linj/imageloader/DownloadImgUtils.java @@ -25,7 +25,7 @@ public class DownloadImgUtils { /** - * urlͼƬָļ + * 根据url下载图片在指定的文件 * * @param urlStr * @param file @@ -78,7 +78,7 @@ public static boolean downloadImgByUrl(String urlStr, File file) } /** - * urlͼƬָļ + * 根据url下载图片在指定的文件 * * @param urlStr * @param file @@ -99,7 +99,7 @@ public static Bitmap downloadImgByUrl(String urlStr, ImageView imageview) opts.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeStream(is, null, opts); - //ȡimageviewҪʾĿ͸ + //获取imageview想要显示的宽和高 ImageSize imageViewSize = ImageSizeUtil.getImageViewSize(imageview); opts.inSampleSize = ImageSizeUtil.caculateInSampleSize(opts, imageViewSize.width, imageViewSize.height); diff --git a/CameraLibrary/src/com/linj/imageloader/ImageLoader.java b/CameraLibrary/src/com/linj/imageloader/ImageLoader.java index 75bd18c..85a98c6 100644 --- a/CameraLibrary/src/com/linj/imageloader/ImageLoader.java +++ b/CameraLibrary/src/com/linj/imageloader/ImageLoader.java @@ -28,46 +28,46 @@ /** * @ClassName: ImageLoader - * @Description: ͼƬ + * @Description: 图片加载器 * @author LinJ - * @date 2015-1-8 9:02:25 + * @date 2015-1-8 上午9:02:25 * */ public class ImageLoader { private static final String TAG = "ImageLoader"; /** - * + * 单例对象 */ private static ImageLoader mInstance; /** - * Ϣ + * 消息队列 */ private LinkedBlockingDeque mTaskQueue; /** - * ͼƬĺĶ + * 图片缓存的核心对象 */ private LruCache mLruCache; /** - * ̳߳ + * 线程池 */ private ExecutorService mThreadPool; private static final int DEAFULT_THREAD_COUNT = 1; /** - * еĵȷʽ + * 队列的调度方式 */ private Type mType = Type.LIFO; /** - * ̨ѯ߳ + * 后台轮询线程 */ private Thread mPoolThread; /** - * UI߳еHandler + * UI线程中的Handler */ private Handler mUIHandler; - /** źſ*/ + /** 信号控制*/ private Semaphore mSemaphoreThreadPool; private Context mContext; @@ -111,29 +111,29 @@ public static ImageLoader getInstance(int threadCount, Type type,Context context } /** - * ʼ + * 初始化 * * @param threadCount * @param type */ private void init(int threadCount, Type type,Context context) { - // ȡӦõڴ + // 获取我们应用的最大可用内存 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheMemory = maxMemory / 8; - //ע˴ҪȡȫContextActivityԴ޷ͷ + //注意此处要获取全局Context,避免引用Activity造成资源无法释放 mContext=context.getApplicationContext(); mLruCache = new LruCache(cacheMemory){ @Override protected int sizeOf(String key, Bitmap value) { // return value.getAllocationByteCount(); - return value.getRowBytes() * value.getHeight(); //ɰ汾 + return value.getRowBytes() * value.getHeight(); //旧版本方法 } }; - // ̳߳ + // 创建线程池 mThreadPool = Executors.newFixedThreadPool(threadCount); mType = type; mSemaphoreThreadPool = new Semaphore(threadCount,true); @@ -141,11 +141,11 @@ protected int sizeOf(String key, Bitmap value) initBackThread(); } /** - * ʼ̨ѯ߳ + * 初始化后台轮询线程 */ private void initBackThread() { - // ̨ѯ߳ + // 后台轮询线程 mPoolThread = new Thread() { @Override @@ -153,11 +153,11 @@ public void run() { while(true){ try { - // ȡһźţ޿źţ߳ + // 获取一个信号,若无可用信号,阻塞线程 mSemaphoreThreadPool.acquire(); - // ̳߳ȥȡһִУΪʱ߳ + // 线程池去取出一个任务进行执行,当任务队列为空时,阻塞线程 Runnable runnable=getTask(); - //ʹִ̳߳ + //使用线程池执行任务 mThreadPool.execute(runnable); } catch (InterruptedException e) { // TODO Auto-generated catch block @@ -173,11 +173,11 @@ public void run() } /** - * pathΪimageviewͼƬ + * 根据path为imageview设置图片 * - * @param path ͼƬ· - * @param imageView ͼƬImageView - * @param options ͼƬز + * @param path 图片路径 + * @param imageView 加载图片的ImageView + * @param options 图片加载参数 * @throws InterruptedException */ public void loadImage( String path, ImageView imageView, DisplayImageOptions options) @@ -189,7 +189,7 @@ public void loadImage( String path, ImageView imageView, DisplayImageOptions op { public void handleMessage(Message msg) { - // ȡõͼƬΪimageviewصͼƬ + // 获取得到图片,为imageview回调设置图片 ImgBeanHolder holder = (ImgBeanHolder) msg.obj; Bitmap bm = holder.bitmap; ImageView view = holder.imageView; @@ -204,7 +204,7 @@ public void handleMessage(Message msg) }; } - // pathڻлȡbitmap + // 根据path在缓存中获取bitmap Bitmap bm = getBitmapFromLruCache(path); if (bm != null) @@ -217,7 +217,7 @@ public void handleMessage(Message msg) } /** - * ݴIJ½һ + * 根据传入的参数,新建一个任务 * * @param path * @param imageView @@ -234,15 +234,15 @@ public void run() Bitmap bm = null; if (options.fromNet) { - //ȥļв + //先去缓存文件夹查找 File file = getDiskCacheDir(imageView.getContext(), md5(path)); - // ڻļз + // 如果在缓存文件中发现 if (file.exists()){ bm = loadImageFromLocal(file.getAbsolutePath(), imageView); } else{ - // ǷӲ̻ + // 检测是否开启硬盘缓存 if (options.cacheOnDisk){ boolean downloadState = DownloadImgUtils .downloadImgByUrl(path, file); @@ -258,13 +258,13 @@ public void run() } else{ bm = loadImageFromLocal(path, imageView); } - // Ƿڴл + // 是否开启内存中缓存 if (options.cacheInMemory) { addBitmapToLruCache(path, bm); } - //ϢUI߳ + //发送消息至UI线程 refreashBitmap(path, imageView, bm,options); - //ͷź + //释放信号 mSemaphoreThreadPool.release(); } @@ -276,11 +276,11 @@ private Bitmap loadImageFromLocal(final String path, final ImageView imageView) { Bitmap bm; - // ͼƬ - // ͼƬѹ - // 1ͼƬҪʾĴС + // 加载图片 + // 图片的压缩 + // 1、获得图片需要显示的大小 ImageSize imageSize = ImageSizeUtil.getImageViewSize(imageView); - // 2ѹͼƬ + // 2、压缩图片 bm = decodeSampledBitmapFromPath(path, imageSize.width, imageSize.height); return bm; @@ -288,7 +288,7 @@ private Bitmap loadImageFromLocal(final String path, /** - * ǩַֽ࣬ + * 利用签名辅助类,将字符串字节数组 * * @param str * @return @@ -310,7 +310,7 @@ public String md5(String str) } /** - * ʽ + * 方式二 * * @param bytes * @return @@ -321,9 +321,9 @@ public String bytes2hex02(byte[] bytes) String tmp = null; for (byte b : bytes) { - // ÿֽ0xFF㣬ȻתΪ10ƣȻIntegerתΪ16 + // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制 tmp = Integer.toHexString(0xFF & b); - if (tmp.length() == 1)// ÿֽ8ΪתΪ16Ʊ־216λ + if (tmp.length() == 1)// 每个字节8为,转为16进制标志,2个16进制位 { tmp = "0" + tmp; } @@ -347,7 +347,7 @@ private void refreashBitmap(String path, ImageView imageView, } /** - * ͼƬLruCache + * 将图片加入LruCache * * @param path * @param bm @@ -361,7 +361,7 @@ protected void addBitmapToLruCache(String path, Bitmap bm) } /** - * ͼƬҪʾĿ͸߶ͼƬѹ + * 根据图片需要显示的宽和高对图片进行压缩 * * @param path * @param width @@ -371,7 +371,7 @@ protected void addBitmapToLruCache(String path, Bitmap bm) protected Bitmap decodeSampledBitmapFromPath(String path, int width, int height) { - // ͼƬĿ͸ߣͼƬصڴ + // 获得图片的宽和高,并不把图片加载到内存中 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); @@ -379,7 +379,7 @@ protected Bitmap decodeSampledBitmapFromPath(String path, int width, options.inSampleSize = ImageSizeUtil.caculateInSampleSize(options, width, height); - // ʹûõInSampleSizeٴνͼƬ + // 使用获得到的InSampleSize再次解析图片 options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(path, options); return bitmap; @@ -388,7 +388,7 @@ protected Bitmap decodeSampledBitmapFromPath(String path, int width, /** - * ûͼƬĵַ + * 获得缓存图片的地址 * * @param context * @param uniqueName @@ -409,7 +409,7 @@ public File getDiskCacheDir(Context context, String uniqueName) } /** - * pathڻлȡbitmap + * 根据path在缓存中获取bitmap * * @param key * @return @@ -421,7 +421,7 @@ private Bitmap getBitmapFromLruCache(String key) /** - * ȡһΪʱ÷ + * 从任务队列取出一个方法,当队列为空时,将阻塞该方法 * * @return * @throws InterruptedException @@ -437,7 +437,7 @@ private Runnable getTask() throws InterruptedException } } /** - * + * 将任务添加入队列 * @param runnable * @throws InterruptedException */ diff --git a/CameraLibrary/src/com/linj/imageloader/ImageSizeUtil.java b/CameraLibrary/src/com/linj/imageloader/ImageSizeUtil.java index 81623f0..b3cdb62 100644 --- a/CameraLibrary/src/com/linj/imageloader/ImageSizeUtil.java +++ b/CameraLibrary/src/com/linj/imageloader/ImageSizeUtil.java @@ -14,7 +14,7 @@ public class ImageSizeUtil { /** - * Ŀ͸ԼͼƬʵʵĿ͸߼SampleSize + * 根据需求的宽和高以及图片实际的宽和高计算SampleSize * * @param options * @param width @@ -41,7 +41,7 @@ public static int caculateInSampleSize(Options options, int reqWidth, } /** - * ImageViewʵѹĿ͸ + * 根据ImageView获适当的压缩的宽和高 * * @param imageView * @return @@ -56,14 +56,14 @@ public static ImageSize getImageViewSize(ImageView imageView) LayoutParams lp = imageView.getLayoutParams(); - int width = imageView.getWidth();// ȡimageviewʵʿ + int width = imageView.getWidth();// 获取imageview的实际宽度 if (width <= 0) { - width = lp.width;// ȡimageviewlayoutĿ + width = lp.width;// 获取imageview在layout中声明的宽度 } if (width <= 0) { - //width = imageView.getMaxWidth();// ֵ + //width = imageView.getMaxWidth();// 检查最大值 width = getImageViewFieldValue(imageView, "mMaxWidth"); } if (width <= 0) @@ -71,14 +71,14 @@ public static ImageSize getImageViewSize(ImageView imageView) width = displayMetrics.widthPixels; } - int height = imageView.getHeight();// ȡimageviewʵʸ߶ + int height = imageView.getHeight();// 获取imageview的实际高度 if (height <= 0) { - height = lp.height;// ȡimageviewlayoutĿ + height = lp.height;// 获取imageview在layout中声明的宽度 } if (height <= 0) { - height = getImageViewFieldValue(imageView, "mMaxHeight");// ֵ + height = getImageViewFieldValue(imageView, "mMaxHeight");// 检查最大值 } if (height <= 0) { @@ -97,7 +97,7 @@ public static class ImageSize } /** - * ͨȡimageviewijֵ + * 通过反射获取imageview的某个属性值 * * @param object * @param fieldName diff --git a/CameraLibrary/src/com/linj/imageloader/displayer/MatrixBitmapDisplayer.java b/CameraLibrary/src/com/linj/imageloader/displayer/MatrixBitmapDisplayer.java index 0c35a21..27945b2 100644 --- a/CameraLibrary/src/com/linj/imageloader/displayer/MatrixBitmapDisplayer.java +++ b/CameraLibrary/src/com/linj/imageloader/displayer/MatrixBitmapDisplayer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright 2011-2013 Sergey Tarasevich, Daniel Mart + * Copyright 2011-2013 Sergey Tarasevich, Daniel Martí * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,9 +22,9 @@ /** * @ClassName: MatrixBitmapDisplayer -* @Description: MatrixЧBitmapDisplayer +* @Description: Matrix效果的BitmapDisplayer * @author LinJ -* @date 2015-1-8 9:54:22 +* @date 2015-1-8 上午9:54:22 * */ public class MatrixBitmapDisplayer implements BitmapDisplayer { @@ -35,14 +35,14 @@ public MatrixBitmapDisplayer() { @Override public void display(Bitmap bitmap, ImageView imageView) { - //ͼƬΪFIT_CENTER + //正常的图片设置为FIT_CENTER imageView.setScaleType(ScaleType.FIT_CENTER); imageView.setImageBitmap(bitmap); } @Override public void display(int resouceID, ImageView imageView) { - // ǰͳĵͼƬԶ + // 加载前和出错的的图片不自动拉伸 imageView.setScaleType(ScaleType.CENTER); imageView.setImageResource(resouceID); } diff --git a/CameraLibrary/src/com/linj/imageloader/displayer/RoundedBitmapDisplayer.java b/CameraLibrary/src/com/linj/imageloader/displayer/RoundedBitmapDisplayer.java index 09c472d..7f6d7c6 100644 --- a/CameraLibrary/src/com/linj/imageloader/displayer/RoundedBitmapDisplayer.java +++ b/CameraLibrary/src/com/linj/imageloader/displayer/RoundedBitmapDisplayer.java @@ -27,9 +27,9 @@ /** * @ClassName: RoundedBitmapDisplayer -* @Description: ԲͼƬ +* @Description: 圆形图片 * @author LinJ -* @date 2015-1-8 9:47:31 +* @date 2015-1-8 上午9:47:31 * */ public class RoundedBitmapDisplayer implements BitmapDisplayer { diff --git a/CameraLibrary/src/com/linj/video/view/VideoPlayerContainer.java b/CameraLibrary/src/com/linj/video/view/VideoPlayerContainer.java index dc5c20f..bf6b58b 100644 --- a/CameraLibrary/src/com/linj/video/view/VideoPlayerContainer.java +++ b/CameraLibrary/src/com/linj/video/view/VideoPlayerContainer.java @@ -31,9 +31,9 @@ /** * @ClassName: VideoContainer - * @Description: ƵƵһЩؼƵSurfaceView + * @Description: 视频播放器容器,包含了视频操作的一些控件和视频播放SurfaceView * @author LinJ - * @date 2015-1-21 4:49:31 + * @date 2015-1-21 下午4:49:31 * */ public class VideoPlayerContainer extends LinearLayout implements OnClickListener @@ -97,7 +97,7 @@ public void playVideo(String path) throws IllegalArgumentException, SecurityExce @Override public void onCompletion(MediaPlayer mp) { - // Žظÿؼ + // 播放结束,隐藏该控件 setVisibility(View.GONE); mProgressBar.setProgress(0); mCurrentTimeView.setText("00:00"); @@ -106,21 +106,21 @@ public void onCompletion(MediaPlayer mp) { @Override public void onSeekComplete(MediaPlayer mp) { - // תָʱ󣬻ָ + // 跳转至指定时间后,恢复播放 resumePlay(); } @Override public boolean onTouchEvent(MotionEvent event) { - // ʹframelayout֣Ϊ˷ֹ¼··viewڴ˴¼ + // 由于在使用了framelayout布局,为了防止点击事件下发给下方的view,在此处捕获掉点击事件。 return true; } @Override public void onPrepared(MediaPlayer mp) { - //׼ţʾÿؼ + //准备播放,显示该控件 setVisibility(View.VISIBLE); int duration=mp.getDuration(); - //¼λ + //设置最大事件,单位秒 mDurationView.setText(mTimeFormat.format(new Date(duration))); mProgressBar.setMax((int) Math.floor(duration/1000)); mp.start(); @@ -149,7 +149,7 @@ public void onClick(View v) { } } /** - * ָ + * 恢复播放 */ @Override public void resumePlay() { @@ -160,7 +160,7 @@ public void resumePlay() { } /** - * ͣ + * 暂停播放 */ @Override public void pausedPlay() { diff --git a/CameraLibrary/src/com/linj/video/view/VideoPlayerOperation.java b/CameraLibrary/src/com/linj/video/view/VideoPlayerOperation.java index 330299c..741984b 100644 --- a/CameraLibrary/src/com/linj/video/view/VideoPlayerOperation.java +++ b/CameraLibrary/src/com/linj/video/view/VideoPlayerOperation.java @@ -4,9 +4,9 @@ /** * @ClassName: VideoPlayerOperation -* @Description: Ƶӿ +* @Description: 视频播放器操作接口 * @author LinJ -* @date 2015-1-27 1:59:38 +* @date 2015-1-27 下午1:59:38 * */ public interface VideoPlayerOperation { diff --git a/CameraLibrary/src/com/linj/video/view/VideoPlayerView.java b/CameraLibrary/src/com/linj/video/view/VideoPlayerView.java index e849da0..686e00e 100644 --- a/CameraLibrary/src/com/linj/video/view/VideoPlayerView.java +++ b/CameraLibrary/src/com/linj/video/view/VideoPlayerView.java @@ -21,9 +21,9 @@ /** * @ClassName: VideoSurfaceView - * @Description: MediaPlayer󶨵SurfaceViewԲƵ + * @Description: 和MediaPlayer绑定的SurfaceView,用以播放视频 * @author LinJ - * @date 2015-1-21 2:38:53 + * @date 2015-1-21 下午2:38:53 * */ public class VideoPlayerView extends SurfaceView implements VideoPlayerOperation { @@ -39,15 +39,15 @@ public VideoPlayerView(Context context, AttributeSet attrs) { } /** - * ʼ + * 初始化 */ private void init() { mMediaPlayer=new MediaPlayer(); - //ʼ + //初始化容器 getHolder().addCallback(callback); } /** - * ò + * 设置播放器监听函数 * @param listener */ protected void setPalyerListener(PlayerListener listener){ @@ -56,7 +56,7 @@ protected void setPalyerListener(PlayerListener listener){ mMediaPlayer.setOnPreparedListener(listener); } /** - * ȡǰǷڲ״̬ + * 获取当前播放器是否在播放状态 * @return */ @Override @@ -65,7 +65,7 @@ public boolean isPlaying(){ } /** - * ȡǰʱ䣬λ + * 获取当前播放时间,单位毫秒 * @return */ @Override @@ -88,23 +88,23 @@ public void resumePlay() { } /** - * õǰλ + * 设置当前播放位置 */ @Override public void seekPosition(int position){ if(isPlaying()) mMediaPlayer.pause(); - //õʱֵƵ󳤶ʱֹͣ + //当设置的时间值大于视频最大长度时,停止播放 if(position<0||position>mMediaPlayer.getDuration()){ mMediaPlayer.stop(); return; } - //ʱ + //设置时间 mMediaPlayer.seekTo(position); } /** - * ֹͣ + * 停止播放 */ @Override public void stopPlay() { @@ -138,16 +138,16 @@ public void playVideo(String path) throws IllegalArgumentException, SecurityExce if(mMediaPlayer!=null&&mMediaPlayer.isPlaying()){ mMediaPlayer.stop(); } - mMediaPlayer.reset(); //resetò + mMediaPlayer.reset(); //reset重新设置播放器引擎 mMediaPlayer.setDataSource(path); mMediaPlayer.prepare(); } /** * @ClassName: PlayerListener - * @Description: Ͻӿڣcontainerʵָýӿ + * @Description: 集合接口,container实现该接口 * @author LinJ - * @date 2015-1-23 3:09:15 + * @date 2015-1-23 下午3:09:15 * */ public interface PlayerListener extends OnCompletionListener,