├── .gitignore ├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── demo │ │ └── guide │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── guide.gif │ ├── java │ └── com │ │ └── demo │ │ ├── aty │ │ ├── HomeActivity.java │ │ ├── MyListActivity.java │ │ └── SimpleGuideViewActivity.java │ │ └── component │ │ ├── LottieComponent.java │ │ ├── MutiComponent.java │ │ └── SimpleComponent.java │ └── res │ ├── drawable │ ├── avatar.png │ ├── header_btn_more.png │ ├── qzone.png │ ├── qzone_arrow.png │ ├── qzone_btn_1.png │ ├── qzone_btn_2.png │ ├── qzone_btn_3.png │ ├── qzone_edu.png │ ├── qzone_game.png │ ├── qzone_group.png │ ├── qzone_live.png │ ├── qzone_music.png │ ├── right_arrow.png │ ├── searchbar_style.xml │ ├── skin_header_bar_bg.9.png │ └── skin_searchbar_bg.png │ ├── layout │ ├── activity_home.xml │ ├── activity_muti_guide_view.xml │ ├── activity_simple_guide_view.xml │ ├── item.xml │ ├── layer_frends.xml │ ├── layer_lottie.xml │ ├── layout_main_title.xml │ ├── layout_searchbar.xml │ └── my_list_layout.xml │ ├── menu │ ├── menu_main.xml │ ├── menu_muti_guide_view.xml │ └── menu_simple_guide_view.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ ├── arrow.png │ └── ic_launcher.png │ ├── raw │ └── guide_up_slide.json │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── guideview ├── build.gradle └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── binioter │ │ └── guideview │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── binioter │ │ └── guideview │ │ ├── BuildException.java │ │ ├── Common.java │ │ ├── Component.java │ │ ├── Configuration.java │ │ ├── DimenUtil.java │ │ ├── Guide.java │ │ ├── GuideBuilder.java │ │ └── MaskView.java │ └── res │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | #built application files 2 | *.apk 3 | *.ap_ 4 | 5 | 6 | # files for the dex VM 7 | *.dex 8 | 9 | 10 | # Java class files 11 | *.class 12 | 13 | 14 | # generated files 15 | bin/ 16 | gen/ 17 | 18 | 19 | # Local configuration file (sdk path, etc) 20 | local.properties 21 | 22 | 23 | # Windows thumbnail db 24 | Thumbs.db 25 | 26 | 27 | # OSX files 28 | .DS_Store 29 | 30 | 31 | # Eclipse project files 32 | .classpath 33 | .project 34 | 35 | 36 | # Android Studio 37 | .idea 38 | #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. 39 | .gradle 40 | build/ 41 | 42 | 43 | # Signing files 44 | .signing/ 45 | 46 | 47 | # User-specific configurations 48 | .idea/libraries/ 49 | .idea/workspace.xml 50 | .idea/tasks.xml 51 | .idea/.name 52 | .idea/compiler.xml 53 | .idea/copyright/profiles_settings.xml 54 | .idea/encodings.xml 55 | .idea/misc.xml 56 | .idea/modules.xml 57 | .idea/scopes/scope_settings.xml 58 | .idea/vcs.xml 59 | *.iml 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *

GuideView

2 | * 本系统能够快速的为一个Activity里的任何一个View控件创建一个遮罩式的导航页,并且可以再高亮区域绘制任何你想要的布局或者lottie动画等炫酷效果

3 | *

工作原理

4 | * 首先它需要一个目标View或者它的id,我们通过findViewById来得到这个View,计算它在屏幕上的区域targetRect,通过这个区域,开始绘制一个覆盖整个Activity的遮罩,可以定义遮罩的颜色和透明度,然而目标View被绘制成透明从而实现高亮的效果。接下来是在相对于这个targetRect的区域绘制一些图片或者文字。我们把这样一张图片或者文字抽象成一个Component接口,设置文字或者图片,所有的图片文字都是相对于targetRect来定义的。可以设定额外的x,y偏移量,可以对遮罩系统设置可见状态的发生变化时的监听回调,可以对遮罩系统设置开始和结束时的动画效。

5 | *

注意:具体用法参见demo,内附详细注释

6 | * 7 | 8 | *

使用方法

9 | *

1.添加gradle依赖

10 | 11 | implementation 'com.binioter:guideview:1.0.0' 12 | 13 | *

2.编写用于在高亮区域周围展示的component

14 | * 15 | public class SimpleComponent implements Component { 16 | 17 | @Override public View getView(LayoutInflater inflater) { 18 | 19 | LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.layer_frends, null); 20 | ll.setOnClickListener(new View.OnClickListener() { 21 | @Override public void onClick(View view) { 22 | Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show(); 23 | } 24 | }); 25 | return ll; 26 | } 27 | 28 | @Override public int getAnchor() { 29 | return Component.ANCHOR_BOTTOM; 30 | } 31 | 32 | @Override public int getFitPosition() { 33 | return Component.FIT_END; 34 | } 35 | 36 | @Override public int getXOffset() { 37 | return 0; 38 | } 39 | 40 | @Override public int getYOffset() { 41 | return 10; 42 | } 43 | } 44 | 45 | *

3.展示引导蒙层,并监听蒙层展示、隐藏事件

46 | * 47 | public void showGuideView() { 48 | GuideBuilder builder = new GuideBuilder(); 49 | builder.setTargetView(header_imgbtn) 50 | .setAlpha(150) 51 | .setHighTargetCorner(20) 52 | .setHighTargetPadding(10); 53 | builder.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { 54 | @Override 55 | public void onShown() { 56 | } 57 | 58 | @Override 59 | public void onDismiss() { 60 | showGuideView2(); 61 | } 62 | }); 63 | 64 | builder.addComponent(new SimpleComponent()); 65 | guide = builder.createGuide(); 66 | guide.show(SimpleGuideViewActivity.this); 67 | 68 | 69 | ## License 70 | 71 | Copyright 2016 binIoter 72 | 73 | Licensed under the Apache License, Version 2.0 (the "License"); 74 | you may not use this file except in compliance with the License. 75 | You may obtain a copy of the License at 76 | 77 | http://www.apache.org/licenses/LICENSE-2.0 78 | 79 | Unless required by applicable law or agreed to in writing, software 80 | distributed under the License is distributed on an "AS IS" BASIS, 81 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 82 | See the License for the specific language governing permissions and 83 | limitations under the License. 84 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 28 5 | buildToolsVersion "28.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.binioter.guide" 9 | minSdkVersion 17 10 | targetSdkVersion 28 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | implementation fileTree(dir: 'libs', include: ['*.jar']) 24 | implementation 'com.airbnb.android:lottie:3.0.7' 25 | implementation project(':guideview') 26 | //implementation 'com.binioter:guideview:1.0.0' 27 | } 28 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/demo/guide/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.demo.guide; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/assets/guide.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/assets/guide.gif -------------------------------------------------------------------------------- /app/src/main/java/com/demo/aty/HomeActivity.java: -------------------------------------------------------------------------------- 1 | package com.demo.aty; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | import android.widget.Button; 8 | 9 | import com.demo.guide.R; 10 | 11 | public class HomeActivity extends Activity implements View.OnClickListener { 12 | private Button mBtnList, mBtnMore; 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_home); 18 | mBtnMore = (Button) findViewById(R.id.btn_more); 19 | mBtnList = (Button) findViewById(R.id.btn_list); 20 | mBtnList.setOnClickListener(this); 21 | mBtnMore.setOnClickListener(this); 22 | } 23 | 24 | @Override 25 | public void onClick(View view) { 26 | switch (view.getId()) { 27 | case R.id.btn_more: 28 | startActivity(new Intent(HomeActivity.this, SimpleGuideViewActivity.class)); 29 | break; 30 | case R.id.btn_list: 31 | startActivity(new Intent(HomeActivity.this, MyListActivity.class)); 32 | break; 33 | 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/demo/aty/MyListActivity.java: -------------------------------------------------------------------------------- 1 | package com.demo.aty; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.BaseAdapter; 10 | import android.widget.Button; 11 | import android.widget.ListView; 12 | import com.binioter.guideview.Guide; 13 | import com.binioter.guideview.GuideBuilder; 14 | import com.demo.component.MutiComponent; 15 | import com.demo.guide.R; 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | /** 20 | * 创建时间: 2016/08/24 16:58
21 | * 作者: zhangbin
22 | * 描述: 23 | */ 24 | public class MyListActivity extends Activity { 25 | ListView listView; 26 | BaseAdapter adapter; 27 | static List arrayList = new ArrayList<>(); 28 | 29 | @Override protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.my_list_layout); 32 | for (int i = 1; i < 200; i++) { 33 | arrayList.add("第" + i + "行"); 34 | } 35 | listView = (ListView) findViewById(R.id.list); 36 | adapter = new MyAdapter(this); 37 | listView.setAdapter(adapter); 38 | } 39 | 40 | private static class MyAdapter extends BaseAdapter { 41 | private Context mContext; 42 | private int showTimes = 0; 43 | 44 | public MyAdapter(Context context) { 45 | this.mContext = context; 46 | } 47 | 48 | @Override public int getCount() { 49 | return arrayList.size(); 50 | } 51 | 52 | @Override public Object getItem(int i) { 53 | return arrayList.get(i); 54 | } 55 | 56 | @Override public long getItemId(int i) { 57 | return i; 58 | } 59 | 60 | @Override public View getView(int i, View view, ViewGroup viewGroup) { 61 | ViewHolder holder; 62 | if (view == null) { 63 | view = LayoutInflater.from(mContext).inflate(R.layout.item, viewGroup, false); 64 | holder = new ViewHolder(); 65 | holder.btn = (Button) view.findViewById(R.id.btn); 66 | view.setTag(holder); 67 | } else { 68 | holder = (ViewHolder) view.getTag(); 69 | } 70 | holder.btn.setText(arrayList.get(i)); 71 | if (i == 5 && showTimes == 0) { 72 | final View finalView = view; 73 | view.post(new Runnable() { 74 | @Override public void run() { 75 | showGuideView(finalView); 76 | } 77 | }); 78 | } 79 | return view; 80 | } 81 | 82 | public void showGuideView(View targetView) { 83 | showTimes++; 84 | GuideBuilder builder = new GuideBuilder(); 85 | builder.setTargetView(targetView) 86 | .setAlpha(150) 87 | .setHighTargetCorner(20) 88 | .setHighTargetPadding(10) 89 | .setOverlayTarget(false) 90 | .setOutsideTouchable(false); 91 | builder.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { 92 | @Override public void onShown() { 93 | } 94 | 95 | @Override public void onDismiss() { 96 | } 97 | }); 98 | 99 | builder.addComponent(new MutiComponent()); 100 | Guide guide = builder.createGuide(); 101 | guide.setShouldCheckLocInWindow(true); 102 | guide.show((Activity) mContext); 103 | } 104 | 105 | private static class ViewHolder { 106 | private Button btn; 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/demo/aty/SimpleGuideViewActivity.java: -------------------------------------------------------------------------------- 1 | package com.demo.aty; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.widget.Button; 7 | import android.widget.LinearLayout; 8 | import android.widget.Toast; 9 | 10 | import com.binioter.guideview.Component; 11 | import com.binioter.guideview.Guide; 12 | import com.binioter.guideview.GuideBuilder; 13 | import com.demo.component.LottieComponent; 14 | import com.demo.component.MutiComponent; 15 | import com.demo.component.SimpleComponent; 16 | import com.demo.guide.R; 17 | 18 | public class SimpleGuideViewActivity extends Activity { 19 | 20 | private Button header_imgbtn; 21 | private LinearLayout ll_nearby, ll_video; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_simple_guide_view); 27 | header_imgbtn = (Button) findViewById(R.id.header_imgbtn); 28 | header_imgbtn.setOnClickListener(new View.OnClickListener() { 29 | @Override 30 | public void onClick(View view) { 31 | Toast.makeText(SimpleGuideViewActivity.this, "show", Toast.LENGTH_SHORT).show(); 32 | } 33 | }); 34 | ll_nearby = (LinearLayout) findViewById(R.id.ll_nearby); 35 | ll_video = (LinearLayout) findViewById(R.id.ll_video); 36 | header_imgbtn.post(new Runnable() { 37 | @Override 38 | public void run() { 39 | showGuideView(); 40 | } 41 | }); 42 | } 43 | 44 | public void showGuideView() { 45 | GuideBuilder builder = new GuideBuilder(); 46 | builder.setTargetView(header_imgbtn) 47 | .setAlpha(150) 48 | .setHighTargetCorner(20) 49 | .setHighTargetPadding(10); 50 | builder.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { 51 | @Override 52 | public void onShown() { 53 | } 54 | 55 | @Override 56 | public void onDismiss() { 57 | showGuideView2(); 58 | } 59 | }); 60 | 61 | builder.addComponent(new SimpleComponent()); 62 | Guide guide = builder.createGuide(); 63 | guide.show(SimpleGuideViewActivity.this); 64 | } 65 | 66 | public void showGuideView2() { 67 | final GuideBuilder builder1 = new GuideBuilder(); 68 | builder1.setTargetView(ll_nearby) 69 | .setAlpha(150) 70 | .setHighTargetGraphStyle(Component.CIRCLE); 71 | builder1.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { 72 | @Override 73 | public void onShown() { 74 | } 75 | 76 | @Override 77 | public void onDismiss() { 78 | showGuideView3(); 79 | } 80 | }); 81 | 82 | builder1.addComponent(new MutiComponent()); 83 | Guide guide = builder1.createGuide(); 84 | guide.show(SimpleGuideViewActivity.this); 85 | } 86 | 87 | public void showGuideView3() { 88 | final GuideBuilder builder1 = new GuideBuilder(); 89 | builder1.setTargetView(ll_video) 90 | .setAlpha(150) 91 | .setHighTargetCorner(20) 92 | .setHighTargetPadding(10) 93 | .setExitAnimationId(android.R.anim.fade_out); 94 | builder1.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { 95 | @Override 96 | public void onShown() { 97 | } 98 | 99 | @Override 100 | public void onDismiss() { 101 | } 102 | }); 103 | 104 | builder1.addComponent(new LottieComponent()); 105 | Guide guide = builder1.createGuide(); 106 | guide.setShouldCheckLocInWindow(false); 107 | guide.show(SimpleGuideViewActivity.this); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/demo/component/LottieComponent.java: -------------------------------------------------------------------------------- 1 | package com.demo.component; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.widget.LinearLayout; 6 | import android.widget.Toast; 7 | 8 | import com.binioter.guideview.Component; 9 | import com.demo.guide.R; 10 | 11 | /** 12 | * Created by binIoter on 16/6/17. 13 | */ 14 | public class LottieComponent implements Component { 15 | 16 | @Override public View getView(LayoutInflater inflater) { 17 | 18 | LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.layer_lottie, null); 19 | ll.setOnClickListener(new View.OnClickListener() { 20 | @Override public void onClick(View view) { 21 | Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show(); 22 | } 23 | }); 24 | return ll; 25 | } 26 | 27 | @Override public int getAnchor() { 28 | return Component.ANCHOR_TOP; 29 | } 30 | 31 | @Override public int getFitPosition() { 32 | return Component.FIT_CENTER; 33 | } 34 | 35 | @Override public int getXOffset() { 36 | return 0; 37 | } 38 | 39 | @Override public int getYOffset() { 40 | return -30; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/demo/component/MutiComponent.java: -------------------------------------------------------------------------------- 1 | package com.demo.component; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | import android.widget.LinearLayout; 7 | import android.widget.TextView; 8 | import android.widget.Toast; 9 | import com.binioter.guideview.Component; 10 | import com.demo.guide.R; 11 | 12 | /** 13 | * Created by binIoter on 16/6/17. 14 | */ 15 | public class MutiComponent implements Component { 16 | 17 | @Override public View getView(LayoutInflater inflater) { 18 | LinearLayout ll = new LinearLayout(inflater.getContext()); 19 | LinearLayout.LayoutParams param = 20 | new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 21 | LinearLayout.LayoutParams.WRAP_CONTENT); 22 | ll.setOrientation(LinearLayout.VERTICAL); 23 | ll.setLayoutParams(param); 24 | TextView textView = new TextView(inflater.getContext()); 25 | textView.setText(R.string.nearby); 26 | textView.setTextColor(inflater.getContext().getResources().getColor(R.color.color_white)); 27 | textView.setTextSize(20); 28 | ImageView imageView = new ImageView(inflater.getContext()); 29 | imageView.setImageResource(R.mipmap.arrow); 30 | ll.removeAllViews(); 31 | ll.addView(textView); 32 | ll.addView(imageView); 33 | ll.setOnClickListener(new View.OnClickListener() { 34 | @Override public void onClick(View view) { 35 | Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show(); 36 | } 37 | }); 38 | return ll; 39 | } 40 | 41 | @Override public int getAnchor() { 42 | return Component.ANCHOR_BOTTOM; 43 | } 44 | 45 | @Override public int getFitPosition() { 46 | return Component.FIT_CENTER; 47 | } 48 | 49 | @Override public int getXOffset() { 50 | return 0; 51 | } 52 | 53 | @Override public int getYOffset() { 54 | return 20; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/demo/component/SimpleComponent.java: -------------------------------------------------------------------------------- 1 | package com.demo.component; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.widget.LinearLayout; 6 | import android.widget.Toast; 7 | import com.binioter.guideview.Component; 8 | import com.demo.guide.R; 9 | 10 | /** 11 | * Created by binIoter on 16/6/17. 12 | */ 13 | public class SimpleComponent implements Component { 14 | 15 | @Override public View getView(LayoutInflater inflater) { 16 | 17 | LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.layer_frends, null); 18 | ll.setOnClickListener(new View.OnClickListener() { 19 | @Override public void onClick(View view) { 20 | Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show(); 21 | } 22 | }); 23 | return ll; 24 | } 25 | 26 | @Override public int getAnchor() { 27 | return Component.ANCHOR_BOTTOM; 28 | } 29 | 30 | @Override public int getFitPosition() { 31 | return Component.FIT_END; 32 | } 33 | 34 | @Override public int getXOffset() { 35 | return 0; 36 | } 37 | 38 | @Override public int getYOffset() { 39 | return 10; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/avatar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/header_btn_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/header_btn_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_btn_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_btn_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_btn_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_btn_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_btn_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_btn_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_edu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_edu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_game.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_group.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_live.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/qzone_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/qzone_music.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/searchbar_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/skin_header_bar_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/skin_header_bar_bg.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/skin_searchbar_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/binIoter/GuideView/39d131a88bd2e7eb8b0b12cd353e3a11dcdaa59c/app/src/main/res/drawable/skin_searchbar_bg.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |