牙叔教程 簡單易懂javascript
使用安卓qq可知, 消息列表每次只能有一個側拉菜單被打開 java
9.0.4android
在MotionEvent.ACTION_DOWN事件return true, 就是攔截事件, return false就是不攔截事件 確認攔截之後, 再也不響應onInterceptTouchEvent, 而是徹底交給onTouchEventmarkdown
在MotionEvent.ACTION_DOWN事件return true, 就是消費事件, return false就是不消費事件網絡
importClass(Packages.androidx.recyclerview.widget.LinearLayoutManager);
importClass(Packages.androidx.recyclerview.widget.RecyclerView);
importClass(android.content.pm.ActivityInfo);
importClass(android.view.WindowManager);
importClass(Packages.androidx.recyclerview.widget.DividerItemDecoration);
importClass(android.graphics.BitmapFactory);
importClass(android.graphics.Paint);
importClass(android.graphics.Color);
importClass(Packages.androidx.recyclerview.widget.GridLayoutManager);
importClass(android.graphics.drawable.GradientDrawable);
importClass(android.view.View);
importClass(android.view.MotionEvent);
importClass(android.widget.HorizontalScrollView);
importClass(android.view.VelocityTracker);
複製代碼
let dataList = require("./dataList");
let setItemOnTouch = require("./setItemOnTouch");
let onItemTouchListener = require("./onItemTouchListener");
let onScrollListener = require("./onScrollListener");
複製代碼
ui.layout(
<vertical> <text text="牙叔教程 簡單易懂" textSize="28sp" textColor="#fbfbfe" bg="#00afff" w="*" gravity="center"></text> <androidx.recyclerview.widget.RecyclerView id="recyclerView"></androidx.recyclerview.widget.RecyclerView> </vertical>
);
複製代碼
let layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
let recycleAdapter = createRecyclerViewAdapter(dataList);
recyclerView.setAdapter(recycleAdapter);
recycleAdapter.notifyDataSetChanged();
recyclerView.addOnItemTouchListener(onItemTouchListener);
recyclerView.addOnScrollListener(onScrollListener);
複製代碼
function getProfilePhoto() {
let filePath = files.path("./牙叔正方形128.jpg");
let img = images.read(filePath);
let bitmap = img.getBitmap();
events.on("exit", () => {
bitmap.recycle();
img.recycle();
});
return bitmap;
}
複製代碼
function createRecyclerViewAdapter(dataList) {
let boxXml = (
<HorizontalScrollView h="100dp"> <horizontal id="horizontalParent"> {/* 消息 */} <horizontal> ... </horizontal> {/* 菜單 */} <horizontal id="menuParent" h="match_parent"> ... </horizontal> </horizontal> </HorizontalScrollView>
);
return RecyclerView.Adapter({
onCreateViewHolder: function (parent, viewType) {
log("onCreateViewHolder");
// 視圖建立
let view;
let holder;
view = ui.inflate(boxXml, parent, false);
holder = JavaAdapter(RecyclerView.ViewHolder, {}, view);
...
return holder;
},
onBindViewHolder: function (holder, position) {
log("onBindViewHolder");
// 數據綁定
...
},
getItemCount: function () {
return dataList.length;
},
getItemViewType: function (position) {
if ((position & 1) == 0) {
return "EvenNumber";
} else {
return "OddNumber";
}
},
getDataList: function () {
return dataList;
},
});
}
複製代碼
function isTouchCoordinateInViewRange(view, x, y) {
let LocationOnScreen = view.getLocationOnScreen();
let frame = new Rect();
view.getHitRect(frame);
log("LocationOnScreen = ");
log(LocationOnScreen);
log("frame = " + frame);
// 觸摸點: x=511.5, y=180.5
// Rect(0, 0 - 1470, 300)
let left = LocationOnScreen[0];
let top = LocationOnScreen[1];
let width = frame.width();
let height = frame.height();
frame.left = left >= 0 ? left : 0;
frame.top = top;
frame.right = left + width;
frame.bottom = top + height;
log("子控件當前區域frame");
log(frame);
if (frame.contains(x, y)) {
log("在控件內" + view);
return true;
} else {
log("不在控件內" + view);
log("觸摸點: x=" + x + ", y=" + y);
return false;
}
}
複製代碼
思路是最重要的, 其餘的百度, bing, stackoverflow, 安卓文檔, autojs文檔, 最後纔是羣裏問問ide
----牙叔教程佈局
部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途學習