package com.example.touth;
public class listdata {
private String x;
private String y;
private String id;
public listdata(String x,String y,String id){
this.x=x;
this.y=y;
this.id=id;
}
public String getx(){return x;};
public String gety(){return y;};
public String getid(){return id;};
}
package com.example.touth;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Instrumentation;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.facebook.stetho.Stetho;
import java.util.ArrayList;
import java.util.List;
import static android.icu.text.MessagePattern.ArgType.SELECT;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private static final String DEBUG_TAG = "Velocity";
private static String DATABASE_TABLE = "students";
private VelocityTracker mVelocityTracker = null;
private View myview;
static SQLiteDatabase db;
private StdDBHelper dbHelper;
private TextView start;
private report report;
List<listdata> data =new ArrayList<>();
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public boolean onTouchEvent(MotionEvent event) {
int index = event.getActionIndex();
int action = event.getActionMasked();
int pointerId = event.getPointerId(index);
switch(action) {
case MotionEvent.ACTION_DOWN:
if(mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
else {
mVelocityTracker.clear();
}
mVelocityTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
mVelocityTracker.addMovement(event);
mVelocityTracker.computeCurrentVelocity(1000);
Log.d("123", "X velocity: " + mVelocityTracker.getXVelocity(pointerId));
Log.d("123", "Y velocity: " + mVelocityTracker.getYVelocity(pointerId));
float horizontalOffset = mVelocityTracker.getXVelocity(pointerId);
float verticalOffset = mVelocityTracker.getYVelocity(pointerId);
String x = String.valueOf(horizontalOffset);
String y= String.valueOf(verticalOffset);
String insert = "INSERT INTO students( X,Y)" +
"VALUES (" + x +","+ y +");";
db.execSQL(insert);
break;
case MotionEvent.ACTION_CANCEL:
mVelocityTracker.recycle();
break;
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Stetho.initializeWithDefaults(this);
start=findViewById(R.id.start);
start.setOnClickListener(this);
dbHelper = new StdDBHelper(this);
db = dbHelper.getWritableDatabase();
}
protected void onStop() {
super.onStop();
db.close();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.start:
gotostart() ;
break;
}
}
private void gotostart(){
for ( int i=0;i<data.size();i++){
}
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
}
}
package com.example.touth;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.app.Instrumentation;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.MotionEvent;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import static com.example.touth.MainActivity.db;
public class MainActivity2 extends AppCompatActivity {
List<listdata> data =new ArrayList<>();
MyRecyclerViewAdapter adapter;
ArrayList<String> x = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
RecyclerView recyclerView = findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter(this, x);
final Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
Log.v("123",""+value);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
for (int i=0;i<data.size();i++) {
x.add(data.get(i).getx());
Log.d("x", "onComplete: "+x);
}
}
};
Observable.create(new ObservableOnSubscribe<String>(){
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
listdata ll;
String sarchsqlite=" SELECT X,Y" +"FROM student";
String selectSQL = "SELECT * FROM students";
Cursor cursor = db.rawQuery(selectSQL,null);
while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndex("id"));
String x = cursor.getString(cursor.getColumnIndex("X"));
String y = cursor.getString(cursor.getColumnIndex("Y"));
ll=new listdata(x,y,id);
data.add(ll);
}
e.onComplete();
}
}).subscribe(observer);
}
}
package com.example.touth;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder>{
private List<String> mData;
private LayoutInflater mInflater;
MyRecyclerViewAdapter(Context context, List<String> data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_row, parent, false);
return new ViewHolder(view);
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView TextView1,TextView2,TextView3;
ViewHolder(View itemView) {
super(itemView);
TextView1 = itemView.findViewById(R.id.textView);
TextView2 = itemView.findViewById(R.id.textView2);
TextView3 = itemView.findViewById(R.id.textView3);
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String animal = mData.get(position);
holder.TextView1.setText(animal);
holder.TextView2.setText(animal);
holder.TextView3.setText(animal);
}
@Override
public int getItemCount() {
return mData.size();
}
}
package com.example.touth;
import android.annotation.SuppressLint;
import android.app.Instrumentation;
import android.os.SystemClock;
import android.util.Log;
import android.view.MotionEvent;
public class report extends Thread {
private Float x,y;
@Override
public void run() {
while(true)
{
try {
Instrumentation inst = new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN, x, y, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),
MotionEvent.ACTION_UP, x, y, 0));
Log.d("點擊位置", x+","+y);
}catch(Exception e) {
Log.e("Exception when sendPointerSync", e.toString());
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public report(Float x,Float y){
this.x=x;
this.y=y;
}
}
package com.example.touth;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class StdDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "Class.db";
private static final int DATABASE_VERSION = 1;
public StdDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String creatSQL = "CREATE TABLE students (" +
"id INTEGER primary key AUTOINCREMENT, " +
"X VARCHAR(250)," +
"Y VARCHAR(250))";
db.execSQL(creatSQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}