public abstract class TamicActivity extends AppCompatActivity {
private int statusBarHeight;
View rootView;
String rootViewTree;
String bigDataPrefix;
String bigDataIngorePrefix;
String bigDataEventPrefix;
private String TAG = "Tamic";
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
//获取到根节点的view
rootView = getWindow().getDecorView();
//控件在视图树上的根路径
rootViewTree = getPackageName() + "." + getClass().getSimpleName();
//前缀名 bigData
bigDataPrefix = "Tamic_test";
//前缀名 bigData_
bigDataIngorePrefix = bigDataPrefix + "";
//前缀名 bigdata_ignore
bigDataEventPrefix = bigDataIngorePrefix +"Igmore";
}
@Override
protected void onResume() {
super.onResume();
TcStatInterface.recordPageStart(TamicActivity.this);
}
@Override
protected void onPause() {
super.onPause();
TcStatInterface.recordPageEnd();
}
@Override
protected void onDestroy() {
super.onDestroy();
// APP退出
TcStatInterface.recordAppEnd();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_DOWN){
ViewPath path = findClickView(ev);
if(path != null) {
Log.e(TAG, "path -->" + path.viewTree);
//调用sdk事件统计
TcStatInterface.initEvent(path.viewTree);
}
}
return super.dispatchTouchEvent(ev);
}
private ViewPath findClickView(MotionEvent ev) {
Log.e(TAG, "bigdata-->findClickView");
ViewPath clickView = new ViewPath(rootView, rootViewTree);
return searchClickView(clickView, ev, 0);
}
private ViewPath searchClickView(ViewPath myView, MotionEvent event, int index) {
ViewPath clickView = null;
View view = myView.view;
if (isInView(view, event)) {
myView.level++;
if (myView.level == 2 && !"LinearLayout".equals(view.getClass().getSimpleName())) {
myView.filterLevelCount++;
}
if (myView.level > myView.filterLevelCount) {
myView.viewTree = myView.viewTree + "." + view.getClass().getSimpleName() + "[" + index + "]";
}
Log.i(TAG, "bigdata-->tag = " + view.getTag());
if (view.getTag() != null) {
// 主动标记不需要统计时,不进行自动统计
String tag = view.getTag().toString();
if (tag.startsWith(bigDataIngorePrefix)) {
return null;
} else if (tag.startsWith(bigDataPrefix)) {
if (tag.startsWith(bigDataEventPrefix)) {
myView.specifyTag = tag.replace(bigDataEventPrefix, "");
}
return myView;
}
}
if (view instanceof ViewGroup) {
if (view instanceof AbsListView) {
Log.i(TAG, "bigdata-->AbsListView ");
return null;
}
ViewGroup group = (ViewGroup) view;
int childCount = group.getChildCount();
if (childCount == 0) {
return myView;
}
for (int i = childCount - 1; i >= 0; i--) {
myView.view = group.getChildAt(i);
clickView = searchClickView(myView, event, i);
if (clickView != null) {
return clickView;
}
}
} else {
clickView = myView;
}
}
return clickView;
}
private boolean isInView(View view, MotionEvent event) {
if (view == null || view.getVisibility() != View.VISIBLE) {
return false;
}
int clickX = (int) event.getRawX();
int clickY = (int) event.getRawY();
int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
int width = view.getWidth();
int height = view.getHeight();
return clickX &g
来源: https://sdk.cn/news/8018