新增网格样式的扫描激光(类似支付宝扫码样式)
This commit is contained in:
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
48
.idea/codeStyles/Project.xml
generated
48
.idea/codeStyles/Project.xml
generated
@@ -1,5 +1,29 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<code_scheme name="Project" version="173">
|
<code_scheme name="Project" version="173">
|
||||||
|
<DBN-PSQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false" />
|
||||||
|
</DBN-PSQL>
|
||||||
|
<DBN-SQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false">
|
||||||
|
<option name="STATEMENT_SPACING" value="one_line" />
|
||||||
|
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
|
||||||
|
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
|
||||||
|
</formatting-settings>
|
||||||
|
</DBN-SQL>
|
||||||
<Objective-C-extensions>
|
<Objective-C-extensions>
|
||||||
<file>
|
<file>
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
|
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
|
||||||
@@ -25,5 +49,29 @@
|
|||||||
<pair source="c" header="h" fileNamingConvention="NONE" />
|
<pair source="c" header="h" fileNamingConvention="NONE" />
|
||||||
</extensions>
|
</extensions>
|
||||||
</Objective-C-extensions>
|
</Objective-C-extensions>
|
||||||
|
<DBN-PSQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false" />
|
||||||
|
</DBN-PSQL>
|
||||||
|
<DBN-SQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false">
|
||||||
|
<option name="STATEMENT_SPACING" value="one_line" />
|
||||||
|
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
|
||||||
|
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
|
||||||
|
</formatting-settings>
|
||||||
|
</DBN-SQL>
|
||||||
</code_scheme>
|
</code_scheme>
|
||||||
</component>
|
</component>
|
||||||
456
.idea/dbnavigator.xml
generated
Normal file
456
.idea/dbnavigator.xml
generated
Normal file
@@ -0,0 +1,456 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DBNavigator.Project.DataEditorManager">
|
||||||
|
<record-view-column-sorting-type value="BY_INDEX" />
|
||||||
|
<value-preview-text-wrapping value="true" />
|
||||||
|
<value-preview-pinned value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DataExportManager">
|
||||||
|
<export-instructions>
|
||||||
|
<create-header value="true" />
|
||||||
|
<quote-values-containing-separator value="true" />
|
||||||
|
<quote-all-values value="false" />
|
||||||
|
<value-separator value="" />
|
||||||
|
<file-name value="" />
|
||||||
|
<file-location value="" />
|
||||||
|
<scope value="GLOBAL" />
|
||||||
|
<destination value="FILE" />
|
||||||
|
<format value="EXCEL" />
|
||||||
|
<charset value="GBK" />
|
||||||
|
</export-instructions>
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseBrowserManager">
|
||||||
|
<autoscroll-to-editor value="false" />
|
||||||
|
<autoscroll-from-editor value="true" />
|
||||||
|
<show-object-properties value="true" />
|
||||||
|
<loaded-nodes />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseFileManager">
|
||||||
|
<open-files />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.EditorStateManager">
|
||||||
|
<last-used-providers />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.MethodExecutionManager">
|
||||||
|
<method-browser />
|
||||||
|
<execution-history>
|
||||||
|
<group-entries value="true" />
|
||||||
|
<execution-inputs />
|
||||||
|
</execution-history>
|
||||||
|
<argument-values-cache />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ObjectDependencyManager">
|
||||||
|
<last-used-dependency-type value="INCOMING" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ObjectQuickFilterManager">
|
||||||
|
<last-used-operator value="EQUAL" />
|
||||||
|
<filters />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
|
||||||
|
<recently-used-interfaces />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.Settings">
|
||||||
|
<connections />
|
||||||
|
<browser-settings>
|
||||||
|
<general>
|
||||||
|
<display-mode value="TABBED" />
|
||||||
|
<navigation-history-size value="100" />
|
||||||
|
<show-object-details value="false" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<object-type-filter>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="true" />
|
||||||
|
<object-type name="ROLE" enabled="true" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="true" />
|
||||||
|
<object-type name="CHARSET" enabled="true" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED_VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED_TABLE" enabled="true" />
|
||||||
|
<object-type name="COLUMN" enabled="true" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="true" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
|
||||||
|
<object-type name="ARGUMENT" enabled="true" />
|
||||||
|
<object-type name="DIMENSION" enabled="true" />
|
||||||
|
<object-type name="CLUSTER" enabled="true" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</object-type-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting>
|
||||||
|
<object-type name="COLUMN" sorting-type="NAME" />
|
||||||
|
<object-type name="FUNCTION" sorting-type="NAME" />
|
||||||
|
<object-type name="PROCEDURE" sorting-type="NAME" />
|
||||||
|
<object-type name="ARGUMENT" sorting-type="POSITION" />
|
||||||
|
</sorting>
|
||||||
|
<default-editors>
|
||||||
|
<object-type name="VIEW" editor-type="SELECTION" />
|
||||||
|
<object-type name="PACKAGE" editor-type="SELECTION" />
|
||||||
|
<object-type name="TYPE" editor-type="SELECTION" />
|
||||||
|
</default-editors>
|
||||||
|
</browser-settings>
|
||||||
|
<navigation-settings>
|
||||||
|
<lookup-filters>
|
||||||
|
<lookup-objects>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="false" />
|
||||||
|
<object-type name="ROLE" enabled="false" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="false" />
|
||||||
|
<object-type name="CHARSET" enabled="false" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED TABLE" enabled="false" />
|
||||||
|
<object-type name="COLUMN" enabled="false" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="false" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE ATTRIBUTE" enabled="false" />
|
||||||
|
<object-type name="ARGUMENT" enabled="false" />
|
||||||
|
<object-type name="DIMENSION" enabled="false" />
|
||||||
|
<object-type name="CLUSTER" enabled="false" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</lookup-objects>
|
||||||
|
<force-database-load value="false" />
|
||||||
|
<prompt-connection-selection value="true" />
|
||||||
|
<prompt-schema-selection value="true" />
|
||||||
|
</lookup-filters>
|
||||||
|
</navigation-settings>
|
||||||
|
<dataset-grid-settings>
|
||||||
|
<general>
|
||||||
|
<enable-zooming value="true" />
|
||||||
|
<enable-column-tooltip value="true" />
|
||||||
|
</general>
|
||||||
|
<sorting>
|
||||||
|
<nulls-first value="true" />
|
||||||
|
<max-sorting-columns value="4" />
|
||||||
|
</sorting>
|
||||||
|
<tracking-columns>
|
||||||
|
<columnNames value="" />
|
||||||
|
<visible value="true" />
|
||||||
|
<editable value="false" />
|
||||||
|
</tracking-columns>
|
||||||
|
</dataset-grid-settings>
|
||||||
|
<dataset-editor-settings>
|
||||||
|
<text-editor-popup>
|
||||||
|
<active value="false" />
|
||||||
|
<active-if-empty value="false" />
|
||||||
|
<data-length-threshold value="100" />
|
||||||
|
<popup-delay value="1000" />
|
||||||
|
</text-editor-popup>
|
||||||
|
<values-actions-popup>
|
||||||
|
<show-popup-button value="true" />
|
||||||
|
<element-count-threshold value="1000" />
|
||||||
|
<data-length-threshold value="250" />
|
||||||
|
</values-actions-popup>
|
||||||
|
<general>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<fetch-timeout value="30" />
|
||||||
|
<trim-whitespaces value="true" />
|
||||||
|
<convert-empty-strings-to-null value="true" />
|
||||||
|
<select-content-on-cell-edit value="true" />
|
||||||
|
<large-value-preview-active value="true" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<prompt-filter-dialog value="true" />
|
||||||
|
<default-filter-type value="BASIC" />
|
||||||
|
</filters>
|
||||||
|
<qualified-text-editor text-length-threshold="300">
|
||||||
|
<content-types>
|
||||||
|
<content-type name="Text" enabled="true" />
|
||||||
|
<content-type name="Properties" enabled="true" />
|
||||||
|
<content-type name="XML" enabled="true" />
|
||||||
|
<content-type name="DTD" enabled="true" />
|
||||||
|
<content-type name="HTML" enabled="true" />
|
||||||
|
<content-type name="XHTML" enabled="true" />
|
||||||
|
<content-type name="Java" enabled="true" />
|
||||||
|
<content-type name="SQL" enabled="true" />
|
||||||
|
<content-type name="PL/SQL" enabled="true" />
|
||||||
|
<content-type name="Groovy" enabled="true" />
|
||||||
|
<content-type name="AIDL" enabled="true" />
|
||||||
|
<content-type name="YAML" enabled="true" />
|
||||||
|
<content-type name="Manifest" enabled="true" />
|
||||||
|
</content-types>
|
||||||
|
</qualified-text-editor>
|
||||||
|
<record-navigation>
|
||||||
|
<navigation-target value="VIEWER" />
|
||||||
|
</record-navigation>
|
||||||
|
</dataset-editor-settings>
|
||||||
|
<code-editor-settings>
|
||||||
|
<general>
|
||||||
|
<show-object-navigation-gutter value="false" />
|
||||||
|
<show-spec-declaration-navigation-gutter value="true" />
|
||||||
|
<enable-spellchecking value="true" />
|
||||||
|
<enable-reference-spellchecking value="false" />
|
||||||
|
</general>
|
||||||
|
<confirmations>
|
||||||
|
<save-changes value="false" />
|
||||||
|
<revert-changes value="true" />
|
||||||
|
</confirmations>
|
||||||
|
</code-editor-settings>
|
||||||
|
<code-completion-settings>
|
||||||
|
<filters>
|
||||||
|
<basic-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="false" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</basic-filter>
|
||||||
|
<extended-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</extended-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting enabled="true">
|
||||||
|
<sorting-element type="RESERVED_WORD" id="keyword" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="datatype" />
|
||||||
|
<sorting-element type="OBJECT" id="column" />
|
||||||
|
<sorting-element type="OBJECT" id="table" />
|
||||||
|
<sorting-element type="OBJECT" id="view" />
|
||||||
|
<sorting-element type="OBJECT" id="materialized view" />
|
||||||
|
<sorting-element type="OBJECT" id="index" />
|
||||||
|
<sorting-element type="OBJECT" id="constraint" />
|
||||||
|
<sorting-element type="OBJECT" id="trigger" />
|
||||||
|
<sorting-element type="OBJECT" id="synonym" />
|
||||||
|
<sorting-element type="OBJECT" id="sequence" />
|
||||||
|
<sorting-element type="OBJECT" id="procedure" />
|
||||||
|
<sorting-element type="OBJECT" id="function" />
|
||||||
|
<sorting-element type="OBJECT" id="package" />
|
||||||
|
<sorting-element type="OBJECT" id="type" />
|
||||||
|
<sorting-element type="OBJECT" id="dimension" />
|
||||||
|
<sorting-element type="OBJECT" id="cluster" />
|
||||||
|
<sorting-element type="OBJECT" id="dblink" />
|
||||||
|
<sorting-element type="OBJECT" id="schema" />
|
||||||
|
<sorting-element type="OBJECT" id="role" />
|
||||||
|
<sorting-element type="OBJECT" id="user" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="function" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="parameter" />
|
||||||
|
</sorting>
|
||||||
|
<format>
|
||||||
|
<enforce-code-style-case value="true" />
|
||||||
|
</format>
|
||||||
|
</code-completion-settings>
|
||||||
|
<execution-engine-settings>
|
||||||
|
<statement-execution>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<execution-timeout value="20" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<focus-result value="false" />
|
||||||
|
<prompt-execution value="false" />
|
||||||
|
</statement-execution>
|
||||||
|
<script-execution>
|
||||||
|
<command-line-interfaces />
|
||||||
|
<execution-timeout value="300" />
|
||||||
|
</script-execution>
|
||||||
|
<method-execution>
|
||||||
|
<execution-timeout value="30" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<parameter-history-size value="10" />
|
||||||
|
</method-execution>
|
||||||
|
</execution-engine-settings>
|
||||||
|
<operation-settings>
|
||||||
|
<transactions>
|
||||||
|
<uncommitted-changes>
|
||||||
|
<on-project-close value="ASK" />
|
||||||
|
<on-disconnect value="ASK" />
|
||||||
|
<on-autocommit-toggle value="ASK" />
|
||||||
|
</uncommitted-changes>
|
||||||
|
<multiple-uncommitted-changes>
|
||||||
|
<on-commit value="ASK" />
|
||||||
|
<on-rollback value="ASK" />
|
||||||
|
</multiple-uncommitted-changes>
|
||||||
|
</transactions>
|
||||||
|
<session-browser>
|
||||||
|
<disconnect-session value="ASK" />
|
||||||
|
<kill-session value="ASK" />
|
||||||
|
<reload-on-filter-change value="false" />
|
||||||
|
</session-browser>
|
||||||
|
<compiler>
|
||||||
|
<compile-type value="KEEP" />
|
||||||
|
<compile-dependencies value="ASK" />
|
||||||
|
<always-show-controls value="false" />
|
||||||
|
</compiler>
|
||||||
|
<debugger>
|
||||||
|
<debugger-type value="ASK" />
|
||||||
|
<use-generic-runners value="true" />
|
||||||
|
</debugger>
|
||||||
|
</operation-settings>
|
||||||
|
<ddl-file-settings>
|
||||||
|
<extensions>
|
||||||
|
<mapping file-type-id="VIEW" extensions="vw" />
|
||||||
|
<mapping file-type-id="TRIGGER" extensions="trg" />
|
||||||
|
<mapping file-type-id="PROCEDURE" extensions="prc" />
|
||||||
|
<mapping file-type-id="FUNCTION" extensions="fnc" />
|
||||||
|
<mapping file-type-id="PACKAGE" extensions="pkg" />
|
||||||
|
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
|
||||||
|
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
|
||||||
|
<mapping file-type-id="TYPE" extensions="tpe" />
|
||||||
|
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
|
||||||
|
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
|
||||||
|
</extensions>
|
||||||
|
<general>
|
||||||
|
<lookup-ddl-files value="true" />
|
||||||
|
<create-ddl-files value="false" />
|
||||||
|
<synchronize-ddl-files value="true" />
|
||||||
|
<use-qualified-names value="false" />
|
||||||
|
<make-scripts-rerunnable value="true" />
|
||||||
|
</general>
|
||||||
|
</ddl-file-settings>
|
||||||
|
<general-settings>
|
||||||
|
<regional-settings>
|
||||||
|
<date-format value="MEDIUM" />
|
||||||
|
<number-format value="UNGROUPED" />
|
||||||
|
<locale value="SYSTEM_DEFAULT" />
|
||||||
|
<use-custom-formats value="false" />
|
||||||
|
</regional-settings>
|
||||||
|
<environment>
|
||||||
|
<environment-types>
|
||||||
|
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
|
||||||
|
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
|
||||||
|
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
|
||||||
|
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
|
||||||
|
</environment-types>
|
||||||
|
<visibility-settings>
|
||||||
|
<connection-tabs value="true" />
|
||||||
|
<dialog-headers value="true" />
|
||||||
|
<object-editor-tabs value="true" />
|
||||||
|
<script-editor-tabs value="false" />
|
||||||
|
<execution-result-tabs value="true" />
|
||||||
|
</visibility-settings>
|
||||||
|
</environment>
|
||||||
|
</general-settings>
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.StatementExecutionManager">
|
||||||
|
<execution-variables />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -25,7 +25,7 @@
|
|||||||
</value>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
language: android
|
language: android
|
||||||
jdk: oraclejdk8
|
jdk: oraclejdk8
|
||||||
before_install:
|
before_install:
|
||||||
- yes | sdkmanager "platforms;android-27"
|
- yes | sdkmanager "platforms;android-28"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- ANDROID_API_LEVEL=27
|
- ANDROID_API_LEVEL=28
|
||||||
- ANDROID_BUILD_TOOLS_VERSION=27.0.3
|
- ANDROID_BUILD_TOOLS_VERSION=28.0.3
|
||||||
- TRAVIS_SECURE_ENV_VARS=true
|
- TRAVIS_SECURE_ENV_VARS=true
|
||||||
|
|
||||||
android:
|
android:
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -29,9 +29,13 @@ ZXingLite for Android 是ZXing的精简版,基于ZXing库优化扫码和生成
|
|||||||
| labelTextColor | color |<font color=#C0C0C0>#FFC0C0C0</font>| 提示文本字体颜色 |
|
| labelTextColor | color |<font color=#C0C0C0>#FFC0C0C0</font>| 提示文本字体颜色 |
|
||||||
| labelTextSize | dimension |14sp| 提示文本字体大小 |
|
| labelTextSize | dimension |14sp| 提示文本字体大小 |
|
||||||
| labelTextPadding | dimension |24dp| 提示文本距离扫描区的间距 |
|
| labelTextPadding | dimension |24dp| 提示文本距离扫描区的间距 |
|
||||||
|
| labelTextLocation | enum |bottom| 提示文本显示位置 |
|
||||||
| showResultPoint | boolean | false | 是否显示合适的扫码结果点 |
|
| showResultPoint | boolean | false | 是否显示合适的扫码结果点 |
|
||||||
| frameWidth | dimension | | 扫码框宽度,需与frameHeight同时使用才有效 |
|
| frameWidth | dimension | | 扫码框宽度 |
|
||||||
| frameHeight | dimension | | 扫码框高度,需与frameWidth同时使用才有效 |
|
| frameHeight | dimension | | 扫码框高度 |
|
||||||
|
| laserStyle | enum | line | 扫描激光的样式 |
|
||||||
|
| gridColumn | integer | 20 | 网格扫描激光列数 |
|
||||||
|
| gridHeight | integer | 40dp | 网格扫描激光高度,为0dp时,表示动态铺满 |
|
||||||
|
|
||||||
|
|
||||||
## 引入
|
## 引入
|
||||||
@@ -41,17 +45,17 @@ ZXingLite for Android 是ZXing的精简版,基于ZXing库优化扫码和生成
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.king.zxing</groupId>
|
<groupId>com.king.zxing</groupId>
|
||||||
<artifactId>zxing-lite</artifactId>
|
<artifactId>zxing-lite</artifactId>
|
||||||
<version>1.0.6</version>
|
<version>1.0.7</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
### Gradle:
|
### Gradle:
|
||||||
```gradle
|
```gradle
|
||||||
implementation 'com.king.zxing:zxing-lite:1.0.6'
|
implementation 'com.king.zxing:zxing-lite:1.0.7'
|
||||||
```
|
```
|
||||||
### Lvy:
|
### Lvy:
|
||||||
```lvy
|
```lvy
|
||||||
<dependency org='com.king.zxing' name='zxing-lite' rev='1.0.6'>
|
<dependency org='com.king.zxing' name='zxing-lite' rev='1.0.7'>
|
||||||
<artifact name='$AID' ext='pom'></artifact>
|
<artifact name='$AID' ext='pom'></artifact>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
@@ -67,7 +71,7 @@ allprojects {
|
|||||||
|
|
||||||
## 引入的库:
|
## 引入的库:
|
||||||
```gradle
|
```gradle
|
||||||
compileOnly 'com.android.support:appcompat-v7:27.1.1'
|
compileOnly 'com.android.support:appcompat-v7:28.0.0'
|
||||||
api 'com.google.zxing:core:3.3.3'
|
api 'com.google.zxing:core:3.3.3'
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -101,6 +105,10 @@ api 'com.google.zxing:core:3.3.3'
|
|||||||
更多使用详情,请查看[app](app)中的源码使用示例
|
更多使用详情,请查看[app](app)中的源码使用示例
|
||||||
|
|
||||||
## 版本记录
|
## 版本记录
|
||||||
|
#### v1.0.7:2019-4-9
|
||||||
|
* 新增网格样式的扫描激光(类似支付宝扫码样式)
|
||||||
|
* 升级Gradle至v4.6
|
||||||
|
|
||||||
#### v1.0.6:2019-1-16
|
#### v1.0.6:2019-1-16
|
||||||
* 支持连续扫码
|
* 支持连续扫码
|
||||||
* 支持横屏扫码(主要为了支持Pad)
|
* 支持横屏扫码(主要为了支持Pad)
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":7,"versionName":"1.0.6","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":8,"versionName":"1.0.7","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
||||||
@@ -57,7 +57,7 @@ public class CodeActivity extends AppCompatActivity {
|
|||||||
*/
|
*/
|
||||||
private void createQRCode(String content){
|
private void createQRCode(String content){
|
||||||
//生成二维码最好放子线程生成防止阻塞UI,这里只是演示
|
//生成二维码最好放子线程生成防止阻塞UI,这里只是演示
|
||||||
Bitmap logo = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
|
Bitmap logo = BitmapFactory.decodeResource(getResources(),R.drawable.logo);
|
||||||
Bitmap bitmap = CodeUtils.createQRCode(content,600,logo);
|
Bitmap bitmap = CodeUtils.createQRCode(content,600,logo);
|
||||||
//显示二维码
|
//显示二维码
|
||||||
ivCode.setImageBitmap(bitmap);
|
ivCode.setImageBitmap(bitmap);
|
||||||
|
|||||||
BIN
app/src/main/res/drawable-xxhdpi/logo.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
@@ -19,7 +19,8 @@
|
|||||||
app:frameColor="@color/colorPrimary"
|
app:frameColor="@color/colorPrimary"
|
||||||
app:cornerColor="@color/colorPrimary"
|
app:cornerColor="@color/colorPrimary"
|
||||||
app:resultPointColor="@color/colorAccent"
|
app:resultPointColor="@color/colorAccent"
|
||||||
app:labelTextLocation="bottom"/>
|
app:labelTextLocation="bottom"
|
||||||
|
app:laserStyle="grid"/>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/ivFlash"
|
android:id="@+id/ivFlash"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ buildscript {
|
|||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.1.4'
|
classpath 'com.android.tools.build:gradle:3.2.1'
|
||||||
classpath 'com.novoda:bintray-release:0.8.1'
|
classpath 'com.novoda:bintray-release:0.9'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
@@ -33,6 +33,8 @@ allprojects {
|
|||||||
charSet 'UTF-8'
|
charSet 'UTF-8'
|
||||||
links "http://docs.oracle.com/javase/8/docs/api"
|
links "http://docs.oracle.com/javase/8/docs/api"
|
||||||
}
|
}
|
||||||
|
|
||||||
options.addStringOption('Xdoclint:none', '-quiet')
|
options.addStringOption('Xdoclint:none', '-quiet')
|
||||||
|
failOnError false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
#Mon Aug 06 16:59:20 CST 2018
|
#Tue Apr 09 15:17:32 CST 2019
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ android {
|
|||||||
|
|
||||||
lintOptions {
|
lintOptions {
|
||||||
abortOnError false
|
abortOnError false
|
||||||
|
warning 'InvalidPackage'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ public class CaptureActivity extends Activity implements SurfaceHolder.Callback
|
|||||||
private CaptureActivityHandler handler;
|
private CaptureActivityHandler handler;
|
||||||
private Result savedResultToShow;
|
private Result savedResultToShow;
|
||||||
private ViewfinderView viewfinderView;
|
private ViewfinderView viewfinderView;
|
||||||
|
private SurfaceView surfaceView;
|
||||||
|
private SurfaceHolder surfaceHolder;
|
||||||
// private TextView statusView;
|
// private TextView statusView;
|
||||||
// private View resultView;
|
// private View resultView;
|
||||||
private Result lastResult;
|
private Result lastResult;
|
||||||
@@ -133,6 +135,14 @@ public class CaptureActivity extends Activity implements SurfaceHolder.Callback
|
|||||||
beepManager = new BeepManager(this);
|
beepManager = new BeepManager(this);
|
||||||
ambientLightManager = new AmbientLightManager(this);
|
ambientLightManager = new AmbientLightManager(this);
|
||||||
|
|
||||||
|
viewfinderView = findViewById(getViewFinderViewId());
|
||||||
|
|
||||||
|
surfaceView = findViewById(getPreviewViewId());
|
||||||
|
surfaceHolder = surfaceView.getHolder();
|
||||||
|
|
||||||
|
|
||||||
|
cameraManager = new CameraManager(getApplication());
|
||||||
|
|
||||||
// PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
|
// PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,22 +170,6 @@ public class CaptureActivity extends Activity implements SurfaceHolder.Callback
|
|||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
// historyManager must be initialized here to update the history preference
|
|
||||||
// historyManager = new HistoryManager(this);
|
|
||||||
// historyManager.trimHistory();
|
|
||||||
|
|
||||||
// CameraManager must be initialized here, not in onCreate(). This is necessary because we don't
|
|
||||||
// want to open the camera driver and measure the screen size if we're going to show the help on
|
|
||||||
// first launch. That led to bugs where the scanning rectangle was the wrong size and partially
|
|
||||||
// off screen.
|
|
||||||
|
|
||||||
cameraManager = new CameraManager(getApplication());
|
|
||||||
viewfinderView = findViewById(getViewFinderViewId());
|
|
||||||
viewfinderView.setCameraManager(cameraManager);
|
|
||||||
|
|
||||||
// resultView = findViewById(R.id.result_view);
|
|
||||||
// statusView = findViewById(R.id.status_view);
|
|
||||||
|
|
||||||
handler = null;
|
handler = null;
|
||||||
lastResult = null;
|
lastResult = null;
|
||||||
|
|
||||||
@@ -189,12 +183,6 @@ public class CaptureActivity extends Activity implements SurfaceHolder.Callback
|
|||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
|
|
||||||
// copyToClipboard = prefs.getBoolean(Preferences.KEY_COPY_TO_CLIPBOARD, true)
|
|
||||||
// && (intent == null || intent.getBooleanExtra(Intents.Scan.SAVE_HISTORY, true));
|
|
||||||
//
|
|
||||||
// source = IntentSource.NONE;
|
|
||||||
// sourceUrl = null;
|
|
||||||
// scanFromWebPageManager = null;
|
|
||||||
decodeFormats = null;
|
decodeFormats = null;
|
||||||
characterSet = null;
|
characterSet = null;
|
||||||
|
|
||||||
@@ -257,8 +245,6 @@ public class CaptureActivity extends Activity implements SurfaceHolder.Callback
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SurfaceView surfaceView = findViewById(getPreviewViewId());
|
|
||||||
SurfaceHolder surfaceHolder = surfaceView.getHolder();
|
|
||||||
if (hasSurface) {
|
if (hasSurface) {
|
||||||
// The activity was paused but not stopped, so the surface still exists. Therefore
|
// The activity was paused but not stopped, so the surface still exists. Therefore
|
||||||
// surfaceCreated() won't be called, so init the camera here.
|
// surfaceCreated() won't be called, so init the camera here.
|
||||||
|
|||||||
@@ -22,12 +22,16 @@ import android.content.Context;
|
|||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.LinearGradient;
|
import android.graphics.LinearGradient;
|
||||||
|
import android.graphics.Matrix;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.Path;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
import android.graphics.Shader;
|
import android.graphics.Shader;
|
||||||
import android.support.annotation.ColorRes;
|
import android.support.annotation.ColorRes;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
import android.text.StaticLayout;
|
import android.text.StaticLayout;
|
||||||
@@ -39,7 +43,6 @@ import android.util.TypedValue;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.google.zxing.ResultPoint;
|
import com.google.zxing.ResultPoint;
|
||||||
import com.king.zxing.camera.CameraManager;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -52,32 +55,29 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public final class ViewfinderView extends View {
|
public final class ViewfinderView extends View {
|
||||||
|
|
||||||
private static final int[] SCANNER_ALPHA = {0, 64, 128, 192, 255, 192, 128, 64};
|
private static final long ANIMATION_DELAY = 15L;
|
||||||
private static final long ANIMATION_DELAY = 20L;
|
|
||||||
private static final int CURRENT_POINT_OPACITY = 0xA0;
|
private static final int CURRENT_POINT_OPACITY = 0xA0;
|
||||||
private static final int MAX_RESULT_POINTS = 20;
|
private static final int MAX_RESULT_POINTS = 20;
|
||||||
private static final int POINT_SIZE = 8;
|
private static final int POINT_SIZE = 8;
|
||||||
|
|
||||||
private static final int CORNER_RECT_WIDTH = 8; //扫描区边角的宽
|
private static final int CORNER_RECT_WIDTH = 8; //扫描区边角的宽
|
||||||
private static final int CORNER_RECT_HEIGHT = 40; //扫描区边角的高
|
private static final int CORNER_RECT_HEIGHT = 40; //扫描区边角的高
|
||||||
private static final int SCANNER_LINE_MOVE_DISTANCE = 6; //扫描线移动距离
|
private static final int SCANNER_LINE_MOVE_DISTANCE = 6; //扫描线移动距离
|
||||||
private static final int SCANNER_LINE_HEIGHT = 10; //扫描线宽度
|
private static final int SCANNER_LINE_HEIGHT = 10; //扫描线宽度
|
||||||
|
|
||||||
private CameraManager cameraManager;
|
private Paint paint;
|
||||||
private final Paint paint;
|
private TextPaint textPaint;
|
||||||
private final TextPaint textPaint;
|
|
||||||
private Bitmap resultBitmap;
|
private Bitmap resultBitmap;
|
||||||
private final int maskColor;
|
private int maskColor;
|
||||||
// private final int resultColor;
|
|
||||||
//扫描区域边框颜色
|
//扫描区域边框颜色
|
||||||
private final int frameColor;
|
private int frameColor;
|
||||||
//扫描线颜色
|
//扫描线颜色
|
||||||
private final int laserColor;
|
private int laserColor;
|
||||||
//四角颜色
|
//四角颜色
|
||||||
private final int cornerColor;
|
private int cornerColor;
|
||||||
private final int resultPointColor;
|
private int resultPointColor;
|
||||||
// private int scannerAlpha;
|
|
||||||
private final float labelTextPadding;
|
private float labelTextPadding;
|
||||||
private TextLocation labelTextLocation;
|
private TextLocation labelTextLocation;
|
||||||
//扫描区域提示文本
|
//扫描区域提示文本
|
||||||
private String labelText;
|
private String labelText;
|
||||||
@@ -94,11 +94,37 @@ public final class ViewfinderView extends View {
|
|||||||
private int frameWidth;
|
private int frameWidth;
|
||||||
//扫码框宽
|
//扫码框宽
|
||||||
private int frameHeight;
|
private int frameHeight;
|
||||||
|
//扫描激光线风格
|
||||||
|
private LaserStyle laserStyle;
|
||||||
|
|
||||||
|
private int gridColumn;
|
||||||
|
private int gridHeight;
|
||||||
|
|
||||||
|
private Rect frame;
|
||||||
|
|
||||||
|
|
||||||
private List<ResultPoint> possibleResultPoints;
|
private List<ResultPoint> possibleResultPoints;
|
||||||
private List<ResultPoint> lastPossibleResultPoints;
|
private List<ResultPoint> lastPossibleResultPoints;
|
||||||
|
|
||||||
|
public enum LaserStyle{
|
||||||
|
NONE(0),LINE(1),GRID(2);
|
||||||
|
private int mValue;
|
||||||
|
LaserStyle(int value){
|
||||||
|
mValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LaserStyle getFromInt(int value){
|
||||||
|
|
||||||
|
for(LaserStyle style : LaserStyle.values()){
|
||||||
|
if(style.mValue == value){
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return LaserStyle.LINE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public enum TextLocation {
|
public enum TextLocation {
|
||||||
TOP(0),BOTTOM(1);
|
TOP(0),BOTTOM(1);
|
||||||
|
|
||||||
@@ -122,10 +148,21 @@ public final class ViewfinderView extends View {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This constructor is used when the class is built from an XML resource.
|
public ViewfinderView(Context context) {
|
||||||
public ViewfinderView(Context context, AttributeSet attrs) {
|
this(context,null);
|
||||||
super(context, attrs);
|
}
|
||||||
|
|
||||||
|
public ViewfinderView(Context context, @Nullable AttributeSet attrs) {
|
||||||
|
this(context, attrs,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViewfinderView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
init(context,attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void init(Context context, AttributeSet attrs) {
|
||||||
//初始化自定义属性信息
|
//初始化自定义属性信息
|
||||||
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ViewfinderView);
|
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ViewfinderView);
|
||||||
maskColor = array.getColor(R.styleable.ViewfinderView_maskColor, ContextCompat.getColor(context,R.color.viewfinder_mask));
|
maskColor = array.getColor(R.styleable.ViewfinderView_maskColor, ContextCompat.getColor(context,R.color.viewfinder_mask));
|
||||||
@@ -145,26 +182,37 @@ public final class ViewfinderView extends View {
|
|||||||
frameWidth = array.getDimensionPixelSize(R.styleable.ViewfinderView_frameWidth,0);
|
frameWidth = array.getDimensionPixelSize(R.styleable.ViewfinderView_frameWidth,0);
|
||||||
frameHeight = array.getDimensionPixelSize(R.styleable.ViewfinderView_frameHeight,0);
|
frameHeight = array.getDimensionPixelSize(R.styleable.ViewfinderView_frameHeight,0);
|
||||||
|
|
||||||
|
laserStyle = LaserStyle.getFromInt(array.getInt(R.styleable.ViewfinderView_laserStyle,LaserStyle.LINE.mValue));
|
||||||
|
gridColumn = array.getInt(R.styleable.ViewfinderView_gridColumn,20);
|
||||||
|
gridHeight = (int)array.getDimension(R.styleable.ViewfinderView_gridHeight,TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,40,getResources().getDisplayMetrics()));
|
||||||
|
|
||||||
array.recycle();
|
array.recycle();
|
||||||
|
|
||||||
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
|
textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
|
||||||
// scannerAlpha = 0;
|
|
||||||
possibleResultPoints = new ArrayList<>(5);
|
possibleResultPoints = new ArrayList<>(5);
|
||||||
lastPossibleResultPoints = null;
|
lastPossibleResultPoints = null;
|
||||||
|
|
||||||
screenWidth = getDisplayMetrics().widthPixels;
|
screenWidth = getDisplayMetrics().widthPixels;
|
||||||
screenHeight = getDisplayMetrics().heightPixels;
|
screenHeight = getDisplayMetrics().heightPixels;
|
||||||
|
|
||||||
|
int size = (int)(Math.min(screenWidth,screenHeight) * 0.625f);
|
||||||
|
|
||||||
|
if(frameWidth<=0 || frameWidth > screenWidth){
|
||||||
|
frameWidth = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(frameHeight<=0 || frameHeight > screenHeight){
|
||||||
|
frameHeight = size;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DisplayMetrics getDisplayMetrics(){
|
private DisplayMetrics getDisplayMetrics(){
|
||||||
return getResources().getDisplayMetrics();
|
return getResources().getDisplayMetrics();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCameraManager(CameraManager cameraManager) {
|
|
||||||
this.cameraManager = cameraManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLabelText(String labelText) {
|
public void setLabelText(String labelText) {
|
||||||
this.labelText = labelText;
|
this.labelText = labelText;
|
||||||
}
|
}
|
||||||
@@ -181,24 +229,19 @@ public final class ViewfinderView extends View {
|
|||||||
this.labelTextSize = textSize;
|
this.labelTextSize = textSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||||
|
//扫码框默认居中,支持利用内距偏移扫码框
|
||||||
|
int leftOffset = (screenWidth - frameWidth) / 2 + getPaddingLeft() - getPaddingRight();
|
||||||
|
int topOffset = (screenHeight - frameHeight) / 2 + getPaddingTop() - getPaddingBottom();
|
||||||
|
frame = new Rect(leftOffset, topOffset, leftOffset + frameWidth, topOffset + frameHeight);
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("DrawAllocation")
|
@SuppressLint("DrawAllocation")
|
||||||
@Override
|
@Override
|
||||||
public void onDraw(Canvas canvas) {
|
public void onDraw(Canvas canvas) {
|
||||||
|
|
||||||
Rect frame;
|
|
||||||
if(frameWidth > 0 && frameWidth < screenWidth && frameHeight > 0 && frameHeight < screenHeight){
|
|
||||||
//扫码框默认居中,当自定义扫码框宽高时,支持利用内距偏移
|
|
||||||
int leftOffset = (screenWidth - frameWidth) / 2 + getPaddingLeft() - getPaddingRight();
|
|
||||||
int topOffset = (screenHeight - frameHeight) / 2 + getPaddingTop() - getPaddingBottom();
|
|
||||||
frame = new Rect(leftOffset, topOffset, leftOffset + frameWidth, topOffset + frameHeight);
|
|
||||||
}else{
|
|
||||||
if (cameraManager == null) {
|
|
||||||
return; // not ready yet, early draw before done configuring
|
|
||||||
}
|
|
||||||
frame = cameraManager.getFramingRect();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (frame == null) {
|
if (frame == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -221,15 +264,11 @@ public final class ViewfinderView extends View {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Draw a red "laser scanner" line through the middle to show decoding is active
|
// Draw a red "laser scanner" line through the middle to show decoding is active
|
||||||
// paint.setColor(laserColor);
|
drawLaserScanner(canvas,frame);
|
||||||
// paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);
|
|
||||||
// scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;
|
|
||||||
// Draw a two pixel solid black border inside the framing rect
|
// Draw a two pixel solid black border inside the framing rect
|
||||||
drawFrame(canvas, frame);
|
drawFrame(canvas, frame);
|
||||||
// 绘制边角
|
// 绘制边角
|
||||||
drawCorner(canvas, frame);
|
drawCorner(canvas, frame);
|
||||||
// Draw a red "laser scanner" line through the middle to show decoding is active
|
|
||||||
drawLaserScanner(canvas,frame);
|
|
||||||
//绘制提示信息
|
//绘制提示信息
|
||||||
drawTextInfo(canvas, frame);
|
drawTextInfo(canvas, frame);
|
||||||
//绘制扫码结果点
|
//绘制扫码结果点
|
||||||
@@ -244,7 +283,11 @@ public final class ViewfinderView extends View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//绘制文本
|
/**
|
||||||
|
* 绘制文本
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
private void drawTextInfo(Canvas canvas, Rect frame) {
|
private void drawTextInfo(Canvas canvas, Rect frame) {
|
||||||
if(!TextUtils.isEmpty(labelText)){
|
if(!TextUtils.isEmpty(labelText)){
|
||||||
textPaint.setColor(labelTextColor);
|
textPaint.setColor(labelTextColor);
|
||||||
@@ -262,7 +305,11 @@ public final class ViewfinderView extends View {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//绘制边角
|
/**
|
||||||
|
* 绘制边角
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
private void drawCorner(Canvas canvas, Rect frame) {
|
private void drawCorner(Canvas canvas, Rect frame) {
|
||||||
paint.setColor(cornerColor);
|
paint.setColor(cornerColor);
|
||||||
//左上
|
//左上
|
||||||
@@ -279,9 +326,32 @@ public final class ViewfinderView extends View {
|
|||||||
canvas.drawRect(frame.right - CORNER_RECT_HEIGHT, frame.bottom - CORNER_RECT_WIDTH, frame.right, frame.bottom, paint);
|
canvas.drawRect(frame.right - CORNER_RECT_HEIGHT, frame.bottom - CORNER_RECT_WIDTH, frame.right, frame.bottom, paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
//绘制扫描线
|
/**
|
||||||
|
* 绘制激光扫描线
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
private void drawLaserScanner(Canvas canvas, Rect frame) {
|
private void drawLaserScanner(Canvas canvas, Rect frame) {
|
||||||
paint.setColor(laserColor);
|
if(laserStyle!=null){
|
||||||
|
paint.setColor(laserColor);
|
||||||
|
switch (laserStyle){
|
||||||
|
case LINE://线
|
||||||
|
drawLineScanner(canvas,frame);
|
||||||
|
break;
|
||||||
|
case GRID://网格
|
||||||
|
drawGridScanner(canvas,frame);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
paint.setShader(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绘制线性式扫描
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
|
private void drawLineScanner(Canvas canvas,Rect frame){
|
||||||
//线性渐变
|
//线性渐变
|
||||||
LinearGradient linearGradient = new LinearGradient(
|
LinearGradient linearGradient = new LinearGradient(
|
||||||
frame.left, scannerStart,
|
frame.left, scannerStart,
|
||||||
@@ -299,17 +369,61 @@ public final class ViewfinderView extends View {
|
|||||||
} else {
|
} else {
|
||||||
scannerStart = frame.top;
|
scannerStart = frame.top;
|
||||||
}
|
}
|
||||||
paint.setShader(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//处理颜色模糊
|
/**
|
||||||
|
* 绘制网格式扫描
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
|
private void drawGridScanner(Canvas canvas,Rect frame){
|
||||||
|
int stroke = 2;
|
||||||
|
paint.setStrokeWidth(stroke);
|
||||||
|
//计算Y轴开始位置
|
||||||
|
int startY = gridHeight > 0 && scannerStart - frame.top > gridHeight ? scannerStart - gridHeight : frame.top;
|
||||||
|
|
||||||
|
LinearGradient linearGradient = new LinearGradient(frame.left + frame.width()/2, startY, frame.left + frame.width()/2, scannerStart, new int[]{shadeColor(laserColor), laserColor}, new float[]{0,1f}, LinearGradient.TileMode.CLAMP);
|
||||||
|
//给画笔设置着色器
|
||||||
|
paint.setShader(linearGradient);
|
||||||
|
|
||||||
|
float wUnit = frame.width() * 1.0f/ gridColumn;
|
||||||
|
float hUnit = wUnit;
|
||||||
|
//遍历绘制网格纵线
|
||||||
|
for (int i = 1; i < gridColumn; i++) {
|
||||||
|
canvas.drawLine(frame.left + i * wUnit, startY,frame.left + i * wUnit, scannerStart,paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
int height = gridHeight > 0 && scannerStart - frame.top > gridHeight ? gridHeight : scannerStart - frame.top;
|
||||||
|
|
||||||
|
//遍历绘制网格横线
|
||||||
|
for (int i = 0; i <= height/hUnit; i++) {
|
||||||
|
canvas.drawLine(frame.left, scannerStart - i * hUnit,frame.right, scannerStart - i * hUnit,paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scannerStart<scannerEnd){
|
||||||
|
scannerStart += SCANNER_LINE_MOVE_DISTANCE;
|
||||||
|
} else {
|
||||||
|
scannerStart = frame.top;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理颜色模糊
|
||||||
|
* @param color
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public int shadeColor(int color) {
|
public int shadeColor(int color) {
|
||||||
String hax = Integer.toHexString(color);
|
String hax = Integer.toHexString(color);
|
||||||
String result = "20"+hax.substring(2);
|
String result = "01"+hax.substring(2);
|
||||||
return Integer.valueOf(result, 16);
|
return Integer.valueOf(result, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制扫描区边框 Draw a two pixel solid black border inside the framing rect
|
/**
|
||||||
|
* 绘制扫描区边框
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
private void drawFrame(Canvas canvas, Rect frame) {
|
private void drawFrame(Canvas canvas, Rect frame) {
|
||||||
paint.setColor(frameColor);
|
paint.setColor(frameColor);
|
||||||
canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);
|
canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);
|
||||||
@@ -318,7 +432,13 @@ public final class ViewfinderView extends View {
|
|||||||
canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);
|
canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制模糊区域 Draw the exterior (i.e. outside the framing rect) darkened
|
/**
|
||||||
|
* 绘制模糊区域
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
* @param width
|
||||||
|
* @param height
|
||||||
|
*/
|
||||||
private void drawExterior(Canvas canvas, Rect frame, int width, int height) {
|
private void drawExterior(Canvas canvas, Rect frame, int width, int height) {
|
||||||
paint.setColor(maskColor);
|
paint.setColor(maskColor);
|
||||||
canvas.drawRect(0, 0, width, frame.top, paint);
|
canvas.drawRect(0, 0, width, frame.top, paint);
|
||||||
@@ -327,7 +447,11 @@ public final class ViewfinderView extends View {
|
|||||||
canvas.drawRect(0, frame.bottom + 1, width, height, paint);
|
canvas.drawRect(0, frame.bottom + 1, width, height, paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
//绘制扫码结果点
|
/**
|
||||||
|
* 绘制扫码结果点
|
||||||
|
* @param canvas
|
||||||
|
* @param frame
|
||||||
|
*/
|
||||||
private void drawResultPoint(Canvas canvas,Rect frame){
|
private void drawResultPoint(Canvas canvas,Rect frame){
|
||||||
|
|
||||||
if(!isShowResultPoint){
|
if(!isShowResultPoint){
|
||||||
@@ -383,6 +507,10 @@ public final class ViewfinderView extends View {
|
|||||||
return isShowResultPoint;
|
return isShowResultPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setLaserStyle(LaserStyle laserStyle) {
|
||||||
|
this.laserStyle = laserStyle;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置显示结果点
|
* 设置显示结果点
|
||||||
* @param showResultPoint 是否显示结果点
|
* @param showResultPoint 是否显示结果点
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ public class CodeUtils {
|
|||||||
canvas.drawBitmap(src, 0, 0, null);
|
canvas.drawBitmap(src, 0, 0, null);
|
||||||
canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);
|
canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);
|
||||||
canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);
|
canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);
|
||||||
canvas.save(Canvas.ALL_SAVE_FLAG);
|
canvas.save();
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
bitmap = null;
|
bitmap = null;
|
||||||
@@ -439,7 +439,7 @@ public class CodeUtils {
|
|||||||
paint.setColor(textColor);
|
paint.setColor(textColor);
|
||||||
paint.setTextAlign(Paint.Align.CENTER);
|
paint.setTextAlign(Paint.Align.CENTER);
|
||||||
canvas.drawText(code,srcWidth/2,srcHeight + textSize /2 + offset,paint);
|
canvas.drawText(code,srcWidth/2,srcHeight + textSize /2 + offset,paint);
|
||||||
canvas.save(Canvas.ALL_SAVE_FLAG);
|
canvas.save();
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
bitmap = null;
|
bitmap = null;
|
||||||
|
|||||||
@@ -16,6 +16,13 @@
|
|||||||
<attr name="showResultPoint" format="boolean"/>
|
<attr name="showResultPoint" format="boolean"/>
|
||||||
<attr name="frameWidth" format="dimension"/>
|
<attr name="frameWidth" format="dimension"/>
|
||||||
<attr name="frameHeight" format="dimension"/>
|
<attr name="frameHeight" format="dimension"/>
|
||||||
|
<attr name="gridColumn" format="integer"/>
|
||||||
|
<attr name="gridHeight" format="dimension"/>
|
||||||
|
<attr name="laserStyle" format="enum">
|
||||||
|
<enum name="none" value="0"/>
|
||||||
|
<enum name="line" value="1"/>
|
||||||
|
<enum name="grid" value="2"/>
|
||||||
|
</attr>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
//App
|
//App
|
||||||
def app_version = [:]
|
def app_version = [:]
|
||||||
app_version.versionCode = 7
|
app_version.versionCode = 8
|
||||||
app_version.versionName = "1.0.6"
|
app_version.versionName = "1.0.7"
|
||||||
ext.app_version = app_version
|
ext.app_version = app_version
|
||||||
|
|
||||||
//build version
|
//build version
|
||||||
def build_versions = [:]
|
def build_versions = [:]
|
||||||
build_versions.minSdk = 16
|
build_versions.minSdk = 16
|
||||||
build_versions.targetSdk = 27
|
build_versions.targetSdk = 28
|
||||||
build_versions.compileSdk = 27
|
build_versions.compileSdk = 28
|
||||||
build_versions.buildTools = "27.0.3"
|
build_versions.buildTools = "28.0.3"
|
||||||
ext.build_versions = build_versions
|
ext.build_versions = build_versions
|
||||||
|
|
||||||
ext.deps = [:]
|
ext.deps = [:]
|
||||||
@@ -17,8 +17,8 @@ ext.deps = [:]
|
|||||||
// App dependencies
|
// App dependencies
|
||||||
def versions = [:]
|
def versions = [:]
|
||||||
//support
|
//support
|
||||||
versions.supportLibrary = "27.1.1"
|
versions.supportLibrary = "28.0.0"
|
||||||
versions.constraintLayout = "1.1.2"
|
versions.constraintLayout = "1.1.3"
|
||||||
|
|
||||||
//test
|
//test
|
||||||
versions.junit = "4.12"
|
versions.junit = "4.12"
|
||||||
|
|||||||
Reference in New Issue
Block a user