मुझे पता है कि एक्स, वाई माउस निर्देशांक में स्थित एंड्रॉइड पर ड्रैग कैसे करें? दो सरल उदाहरणों पर विचार करें, टीम व्यूअर / क्विकसुपोर्ट क्रमशः रिमोट स्मार्टफोन और विंडोज पेंट की पेन पर "पासवर्ड पैटर्न" ड्राइंग।
सब है कि मैं बनाने में सक्षम है स्पर्श स्पर्श (साथ dispatchGesture()
भी AccessibilityNodeInfo.ACTION_CLICK
) है।
मुझे ये प्रासंगिक लिंक मिले, लेकिन पता नहीं कि वे उपयोगी हो सकते हैं:
नीचे मेरा कार्य कोड है जो माउस निर्देशांक ( PictureBox
नियंत्रण के अंदर ) को रिमोट फोन पर भेजने और स्पर्श का अनुकरण करने के लिए उपयोग किया जाता है ।
Windows प्रपत्र अनुप्रयोग:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
foreach (ListViewItem item in lvConnections.SelectedItems)
{
// Remote screen resolution
string[] tokens = item.SubItems[5].Text.Split('x'); // Ex: 1080x1920
int xClick = (e.X * int.Parse(tokens[0].ToString())) / (pictureBox1.Size.Width);
int yClick = (e.Y * int.Parse(tokens[1].ToString())) / (pictureBox1.Size.Height);
Client client = (Client)item.Tag;
if (e.Button == MouseButtons.Left)
client.sock.Send(Encoding.UTF8.GetBytes("TOUCH" + xClick + "<|>" + yClick + Environment.NewLine));
}
}
संपादित करें:
मेरा आखिरी प्रयास माउस निर्देशांक (C # विंडोज फॉर्म एप्लीकेशन) और एक कस्टम एंड्रॉइड रूटीन (ऊपर लिंक किए गए "स्वाइप स्क्रीन के कोड के संदर्भ में) का उपयोग करके" स्वाइप स्क्रीन "था, क्रमशः:
private Point mdownPoint = new Point();
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
foreach (ListViewItem item in lvConnections.SelectedItems)
{
// Remote screen resolution
string[] tokens = item.SubItems[5].Text.Split('x'); // Ex: 1080x1920
Client client = (Client)item.Tag;
if (e.Button == MouseButtons.Left)
{
xClick = (e.X * int.Parse(tokens[0].ToString())) / (pictureBox1.Size.Width);
yClick = (e.Y * int.Parse(tokens[1].ToString())) / (pictureBox1.Size.Height);
// Saving start position:
mdownPoint.X = xClick;
mdownPoint.Y = yClick;
client.sock.Send(Encoding.UTF8.GetBytes("TOUCH" + xClick + "<|>" + yClick + Environment.NewLine));
}
}
}
private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
{
foreach (ListViewItem item in lvConnections.SelectedItems)
{
// Remote screen resolution
string[] tokens = item.SubItems[5].Text.Split('x'); // Ex: 1080x1920
Client client = (Client)item.Tag;
if (e.Button == MouseButtons.Left)
{
xClick = (e.X * int.Parse(tokens[0].ToString())) / (pictureBox1.Size.Width);
yClick = (e.Y * int.Parse(tokens[1].ToString())) / (pictureBox1.Size.Height);
client.sock.Send(Encoding.UTF8.GetBytes("MOUSESWIPESCREEN" + mdownPoint.X + "<|>" + mdownPoint.Y + "<|>" + xClick + "<|>" + yClick + Environment.NewLine));
}
}
}
Android पहुँच क्षमता सेवा :
public void Swipe(int x1, int y1, int x2, int y2, int time) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
System.out.println(" ======= Swipe =======");
GestureDescription.Builder gestureBuilder = new GestureDescription.Builder();
Path path = new Path();
path.moveTo(x1, y1);
path.lineTo(x2, y2);
gestureBuilder.addStroke(new GestureDescription.StrokeDescription(path, 100, time));
dispatchGesture(gestureBuilder.build(), new GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
System.out.println("SWIPE Gesture Completed :D");
super.onCompleted(gestureDescription);
}
}, null);
}
}
जो निम्न परिणाम उत्पन्न करता है (लेकिन फिर भी उदाहरण के लिए TeamViewer की तरह "पैटर्न पासवर्ड" नहीं बना सकता है)। लेकिन जैसा कि नीचे टिप्पणी पर कहा गया है, मुझे लगता है कि एक समान दृष्टिकोण के साथ यह संभवतया जारी इशारों का उपयोग करके प्राप्त किया जा सकता है । इस दिशा में किसी भी सुझाव का स्वागत किया जाएगा।
2 संपादित करें:
निश्चित रूप से, समाधान को इशारों में जारी रखा गया है जैसे कि पिछले संपादन पर ।
और नीचे एक निश्चित निश्चित कोड है जो मुझे यहाँ मिला =>
Android पहुँच क्षमता सेवा:
// Simulates an L-shaped drag path: 200 pixels right, then 200 pixels down.
Path path = new Path();
path.moveTo(200,200);
path.lineTo(400,200);
final GestureDescription.StrokeDescription sd = new GestureDescription.StrokeDescription(path, 0, 500, true);
// The starting point of the second path must match
// the ending point of the first path.
Path path2 = new Path();
path2.moveTo(400,200);
path2.lineTo(400,400);
final GestureDescription.StrokeDescription sd2 = sd.continueStroke(path2, 0, 500, false); // 0.5 second
HongBaoService.mService.dispatchGesture(new GestureDescription.Builder().addStroke(sd).build(), new AccessibilityService.GestureResultCallback(){
@Override
public void onCompleted(GestureDescription gestureDescription){
super.onCompleted(gestureDescription);
HongBaoService.mService.dispatchGesture(new GestureDescription.Builder().addStroke(sd2).build(),null,null);
}
@Override
public void onCancelled(GestureDescription gestureDescription){
super.onCancelled(gestureDescription);
}
},null);
फिर, मेरा संदेह है: ऊपर दिए गए कोड के लिए सही ढंग से माउस निर्देशांक कैसे भेजें, किसी भी दिशा में खींचें प्रदर्शन कर सकते हैं? कुछ विचार?
संपादित करें 3:
मुझे दो रूटीन मिले जो ड्रैग करने के लिए उपयोग किए जाते हैं, लेकिन वे यूआईटोमेशन + का उपयोग कर रहे हैं injectInputEvent()
। AFAIK, ईवेंट का इंजेक्शन केवल एक सिस्टम ऐप में काम करता है जैसे कि यहाँ और यहाँ कहा गया है और मैं यह नहीं चाहता।
यह रूटीन पाए जाते हैं:
- सार्वजनिक बूलियन स्वाइप (int downX, int downY, int upX, int upY, int steps, बूलियन ड्रैग)
- सार्वजनिक बूलियन स्वाइप (प्वाइंट [] सेगमेंट, इंट सेगमेंट स्टेप्स)
फिर अपने लक्ष्य को प्राप्त करने के लिए, मुझे लगता है कि 2d रूटीन को एडिट 2 पर दिखाए गए कोड के साथ (तर्क का अनुसरण करते हुए, घटना इंजेक्शन को छोड़कर) उपयोग करने के लिए अधिक विनियोजित किया जाता है pictureBox1_MouseDown
और गतिशील रूप से और भेजने के pictureBox1_MouseMove
लिए क्रमशः (सी # विंडोज फॉर्म एप्लीकेशन) के सभी बिंदुओं Point[]
को pictureBox1_MouseUp
भेजें। नियमित रूप से निष्पादित करने और भरे हुए इस सरणी का उपयोग करने के लिए cmd। यदि आपके पास 1 दिनचर्या का विचार है, तो मुझे बताएं: डी।
यदि इस संपादन को पढ़ने के बाद आपके पास एक संभावित समाधान है, तो कृपया मुझे एक उत्तर में दिखाएं, जबकि मैं इस विचार का परीक्षण और परीक्षण करूंगा।
StrokeDescription.continueStroke()
यह एक संभावित समाधान हो सकता है। यहां अनुभाग जारी इशारों को देखें ।
pictureBox1_MouseDown
निर्देशांक नहीं भेजना चाहिए। इसे केवल प्रारंभिक निर्देशांक संग्रहीत करना चाहिए, और फिर pictureBox1_MouseUp
आप उन्हें भेजते हैं, क्योंकि यह माउस आंदोलन के अंत को चिह्नित करता है