diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..bcaf97e --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1fb8611 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 68aee4f..950909a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 24 - buildToolsVersion "23.0.1" + compileSdkVersion 30 defaultConfig { applicationId "com.zhy.highlight" - minSdkVersion 11 - targetSdkVersion 21 + minSdkVersion 21 + targetSdkVersion 30 versionCode 1 versionName "1.0" } @@ -20,10 +19,10 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile project(':highlight') - compile 'com.android.support:appcompat-v7:24.2.0' - debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' - releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' - testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation project(':highlight') + implementation 'androidx.appcompat:appcompat:1.3.1' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' + releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' + testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' } diff --git a/app/src/main/java/com/zhy/highlight/MainActivity.java b/app/src/main/java/com/zhy/highlight/MainActivity.java index bfd5e40..3a37cc4 100644 --- a/app/src/main/java/com/zhy/highlight/MainActivity.java +++ b/app/src/main/java/com/zhy/highlight/MainActivity.java @@ -6,13 +6,14 @@ import android.graphics.Paint; import android.graphics.RectF; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import zhy.com.highlight.HighLight; import zhy.com.highlight.interfaces.HighLightInterface; import zhy.com.highlight.position.OnBottomPosCallback; @@ -25,14 +26,12 @@ import zhy.com.highlight.shape.RectLightShape; import zhy.com.highlight.view.HightLightView; -public class MainActivity extends AppCompatActivity -{ +public class MainActivity extends AppCompatActivity { private HighLight mHightLight; @Override - protected void onCreate(Bundle savedInstanceState) - { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -59,13 +58,13 @@ public void onWindowFocusChanged(boolean hasFocus) { // if(hasFocus) mHightLight.show(); } - public void showTipView(View view){ + public void showTipView(View view) { mHightLight = new HighLight(MainActivity.this)// .anchor(findViewById(R.id.id_container))//如果是Activity上增加引导层,不需要设置anchor - .addHighLight(R.id.btn_rightLight,R.layout.info_gravity_left_down,new OnLeftPosCallback(45),new RectLightShape()) - .addHighLight(R.id.btn_light,R.layout.info_gravity_left_down,new OnRightPosCallback(5),new CircleLightShape()) - .addHighLight(R.id.btn_bottomLight,R.layout.info_gravity_left_down,new OnTopPosCallback(),new CircleLightShape()) - .addHighLight(view,R.layout.info_gravity_left_down,new OnBottomPosCallback(60),new CircleLightShape()); + .addHighLight(R.id.btn_rightLight, R.layout.info_gravity_left_down, new OnLeftPosCallback(45), new RectLightShape()) + .addHighLight(R.id.btn_light, R.layout.info_gravity_left_down, new OnRightPosCallback(5), new CircleLightShape()) + .addHighLight(R.id.btn_bottomLight, R.layout.info_gravity_left_down, new OnTopPosCallback(), new CircleLightShape()) + .addHighLight(view, R.layout.info_gravity_left_down, new OnBottomPosCallback(60), new CircleLightShape()); mHightLight.show(); } @@ -74,9 +73,10 @@ public void showTipView(View view){ * 显示方法必须在onLayouted中调用 * 适用于Activity及Fragment中使用 * 可以直接在onCreated方法中调用 + * * @author isanwenyu@163.com */ - public void showNextTipViewOnCreated(){ + public void showNextTipViewOnCreated() { mHightLight = new HighLight(MainActivity.this)// .anchor(findViewById(R.id.id_container))//如果是Activity上增加引导层,不需要设置anchor .autoRemove(false) @@ -85,9 +85,9 @@ public void showNextTipViewOnCreated(){ @Override public void onLayouted() { //界面布局完成添加tipview - mHightLight.addHighLight(R.id.btn_rightLight,R.layout.info_gravity_left_down,new OnLeftPosCallback(45),new RectLightShape()) - .addHighLight(R.id.btn_light,R.layout.info_gravity_left_down,new OnRightPosCallback(5),new CircleLightShape()) - .addHighLight(R.id.btn_bottomLight,R.layout.info_gravity_left_down,new OnTopPosCallback(),new CircleLightShape()); + mHightLight.addHighLight(R.id.btn_rightLight, R.layout.info_gravity_left_down, new OnLeftPosCallback(45), new RectLightShape()) + .addHighLight(R.id.btn_light, R.layout.info_gravity_left_down, new OnRightPosCallback(5), new CircleLightShape()) + .addHighLight(R.id.btn_bottomLight, R.layout.info_gravity_left_down, new OnTopPosCallback(), new CircleLightShape()); //然后显示高亮布局 mHightLight.show(); } @@ -100,18 +100,20 @@ public void onClick() { } }); } + /** * 显示next模式提示布局 + * * @param view * @author isanwenyu@163.com */ - public void showNextTipView(View view){ + public void showNextTipView(View view) { mHightLight = new HighLight(MainActivity.this)// .anchor(findViewById(R.id.id_container))//如果是Activity上增加引导层,不需要设置anchor - .addHighLight(R.id.btn_rightLight,R.layout.info_gravity_left_down,new OnLeftPosCallback(45),new RectLightShape()) - .addHighLight(R.id.btn_light,R.layout.info_gravity_left_down,new OnRightPosCallback(5),new CircleLightShape()) - .addHighLight(R.id.btn_bottomLight,R.layout.info_gravity_left_down,new OnTopPosCallback(),new CircleLightShape()) - .addHighLight(view,R.layout.info_gravity_left_down,new OnBottomPosCallback(60),new CircleLightShape()) + .addHighLight(R.id.btn_rightLight, R.layout.info_gravity_left_down, new OnLeftPosCallback(45), new RectLightShape()) + .addHighLight(R.id.btn_light, R.layout.info_gravity_left_down, new OnRightPosCallback(5), new CircleLightShape()) + .addHighLight(R.id.btn_bottomLight, R.layout.info_gravity_left_down, new OnTopPosCallback(), new CircleLightShape()) + .addHighLight(view, R.layout.info_gravity_left_down, new OnBottomPosCallback(60), new CircleLightShape()) .autoRemove(false) .enableNext() .setClickCallback(new HighLight.OnClickCallback() { @@ -126,11 +128,11 @@ public void onClick() { /** * 显示我知道了提示高亮布局 + * * @param view id为R.id.iv_known的控件 * @author isanwenyu@163.com */ - public void showKnownTipView(View view) - { + public void showKnownTipView(View view) { mHightLight = new HighLight(MainActivity.this)// .autoRemove(false)//设置背景点击高亮布局自动移除为false 默认为true .intercept(false)//设置拦截属性为false 高亮布局不影响后面布局的滑动效果 而且使下方点击回调失效 @@ -142,10 +144,18 @@ public void onClick() { } }) .anchor(findViewById(R.id.id_container))//如果是Activity上增加引导层,不需要设置anchor - .addHighLight(R.id.btn_rightLight,R.layout.info_known,new OnLeftPosCallback(45),new RectLightShape()) - .addHighLight(R.id.btn_light,R.layout.info_known,new OnRightPosCallback(5),new CircleLightShape(0,0,0)) - .addHighLight(R.id.btn_bottomLight,R.layout.info_known,new OnTopPosCallback(),new CircleLightShape()) - .addHighLight(view,R.layout.info_known,new OnBottomPosCallback(10),new OvalLightShape(5,5,20)); + .addHighLight(R.id.btn_rightLight, R.layout.info_known, new OnLeftPosCallback(45), new RectLightShape()) + .addHighLight(R.id.btn_light, R.layout.info_known, new OnRightPosCallback(5), new CircleLightShape(0, 0, 0)) + .addHighLight(R.id.btn_bottomLight, R.layout.info_known, new OnTopPosCallback(), new CircleLightShape()) + .addHighLight(view, R.layout.info_known, + new OnBottomPosCallback(10) { + @Override + public void getPosition(float rightMargin, float bottomMargin, RectF rectF, HighLight.MarginInfo marginInfo) { + marginInfo.topMargin = rectF.top; + } + }, + new OvalLightShape(5, 5, 20) + ); mHightLight.show(); // //added by isanwenyu@163.com 设置监听器只有最后一个添加到HightLightView的knownView响应了事件 @@ -163,11 +173,11 @@ public void onClick() { /** * 显示 next模式 我知道了提示高亮布局 + * * @param view id为R.id.iv_known的控件 * @author isanwenyu@163.com */ - public void showNextKnownTipView(View view) - { + public void showNextKnownTipView(View view) { mHightLight = new HighLight(MainActivity.this)// .autoRemove(false)//设置背景点击高亮布局自动移除为false 默认为true // .intercept(false)//设置拦截属性为false 高亮布局不影响后面布局的滑动效果 @@ -181,12 +191,12 @@ public void showNextKnownTipView(View view) // } // }) .anchor(findViewById(R.id.id_container))//如果是Activity上增加引导层,不需要设置anchor - .addHighLight(R.id.btn_rightLight,R.layout.info_known,new OnLeftPosCallback(45),new RectLightShape(0,0,15,0,0))//矩形去除圆角 - .addHighLight(R.id.btn_light,R.layout.info_known,new OnRightPosCallback(5),new BaseLightShape(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,5,getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,5,getResources().getDisplayMetrics()),0) { + .addHighLight(R.id.btn_rightLight, R.layout.info_known, new OnLeftPosCallback(45), new RectLightShape(0, 0, 15, 0, 0))//矩形去除圆角 + .addHighLight(R.id.btn_light, R.layout.info_known, new OnRightPosCallback(5), new BaseLightShape(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()), 0) { @Override protected void resetRectF4Shape(RectF viewPosInfoRectF, float dx, float dy) { //缩小高亮控件范围 - viewPosInfoRectF.inset(dx,dy); + viewPosInfoRectF.inset(dx, dy); } @Override @@ -197,15 +207,15 @@ protected void drawShape(Bitmap bitmap, HighLight.ViewPosInfo viewPosInfo) { paint.setDither(true); paint.setAntiAlias(true); //blurRadius必须大于0 - if(blurRadius>0){ + if (blurRadius > 0) { paint.setMaskFilter(new BlurMaskFilter(blurRadius, BlurMaskFilter.Blur.SOLID)); } RectF rectF = viewPosInfo.rectF; canvas.drawOval(rectF, paint); } }) - .addHighLight(R.id.btn_bottomLight,R.layout.info_known,new OnTopPosCallback(),new CircleLightShape()) - .addHighLight(view,R.layout.info_known,new OnBottomPosCallback(10),new OvalLightShape(5,5,20)) + .addHighLight(R.id.btn_bottomLight, R.layout.info_known, new OnTopPosCallback(), new CircleLightShape()) + .addHighLight(view, R.layout.info_known, new OnBottomPosCallback(10), new OvalLightShape(5, 5, 20)) .setOnRemoveCallback(new HighLightInterface.OnRemoveCallback() {//监听移除回调 @Override public void onRemove() { @@ -222,7 +232,7 @@ public void onShow(HightLightView hightLightView) { @Override public void onNext(HightLightView hightLightView, View targetView, View tipView) { // targetView 目标按钮 tipView添加的提示布局 可以直接找到'我知道了'按钮添加监听事件等处理 - Toast.makeText(MainActivity.this, "The HightLight show next TipView,targetViewID:"+(targetView==null?null:targetView.getId())+",tipViewID:"+(tipView==null?null:tipView.getId()), Toast.LENGTH_SHORT).show(); + Toast.makeText(MainActivity.this, "The HightLight show next TipView,targetViewID:" + (targetView == null ? null : targetView.getId()) + ",tipViewID:" + (tipView == null ? null : tipView.getId()), Toast.LENGTH_SHORT).show(); } }); mHightLight.show(); @@ -231,24 +241,21 @@ public void onNext(HightLightView hightLightView, View targetView, View tipView) /** * 响应所有R.id.iv_known的控件的点击事件 *

- * 移除高亮布局 + * 移除高亮布局 *

* * @param view */ - public void clickKnown(View view) - { - if(mHightLight.isShowing() && mHightLight.isNext())//如果开启next模式 + public void clickKnown(View view) { + if (mHightLight.isShowing() && mHightLight.isNext())//如果开启next模式 { mHightLight.next(); - }else - { + } else { remove(null); } } - private void showTipMask() - { + private void showTipMask() { // mHightLight = new HighLight(MainActivity.this)// // .anchor(findViewById(R.id.id_container)) //如果是Activity上增加引导层,不需要设置anchor @@ -314,20 +321,17 @@ private void showTipMask() } - public void remove(View view) - { + public void remove(View view) { mHightLight.remove(); } - public void add(View view) - { + public void add(View view) { mHightLight.show(); } @Override - public boolean onCreateOptionsMenu(Menu menu) - { + public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); @@ -335,16 +339,14 @@ public boolean onCreateOptionsMenu(Menu menu) } @Override - public boolean onOptionsItemSelected(MenuItem item) - { + public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) - { + if (id == R.id.action_settings) { //test container change // View container = findViewById(R.id.id_container); // ViewGroup.LayoutParams lp = diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4b895a7..0cbe8cf 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,9 +10,12 @@ android:id="@+id/btn_show_known_tip" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:onClick="showKnownTipView" - android:layout_margin="10dp" android:layout_alignParentLeft="true" + android:layout_marginStart="10dp" + android:layout_marginTop="10dp" + android:layout_marginEnd="10dp" + android:layout_marginBottom="10dp" + android:onClick="showKnownTipView" android:text="showKnownTip" />