1 голос 1489 просмотров 23.11.2017 / 19:41
Magatino
Если нажать на кнопку, то срабатывает какое-то действие, а как сделать так, когда водишь пальцем по экрану, значит водишь водишь, и дошёл до кнопки и она сработала?Немного уточну, я делаю виртуальный джостик под типа как на эмуляторах приставок PS1 и Sega.
Изм. Magatino
от 23.11.2017 / 21:29
Ответы
3 голоса
1 голос
По коду видно, если я просто нажму на любую область экрана, то произойдёт действие. Но на деле, действие происходит лишь тогда, когда я только нажимаю на кнопки, которые я запихал в OnTouchListener, то есть MotionEvent.ACTION_DOWN срабатывает на нажатие тех кнопок, которые в OnTouchListener. А MotionEvent.ACTION_MOVE , как-то странно работает, как будто ты зажал кнопку. Перейдя на метод OnTouchEvent(Event event) у меня почти сразу всё получилось. MotionEvent.ACTION_DOWN и MotionEvent.ACTION_MOVE работали как надо, в принципе ничего не менял в коде, лишь добавил проверку попадания пальца в область кнопок. Короче, как-то так
Изм. Magatino
от 29.11.2017 / 22:20
30.11.2017 / 02:55
Витаминыч
Молодец!
1 голос Это для UI дефолтного, ты же сам можешь реализовать свой листенер с чеком состояния (не_нажато, удерживается, нажато_смещается, отпущено) и проверкой координат. Моя теория, практики не имел, но читал статьи. Можешь загуглить пример, как делают джойстик (или просто стик, не крестовина), который как шарик и в играх обычно камерой управляет и эту механику на крестовину перенести, с "невидимым" шариком Когда он окажется в одной из четвертей, то и вызывать соответ. метод. 1 голос Вроде можно нажать и водить, но выполняться не будет
23.11.2017 / 21:26
Magatino
В виртуальных джостиках редко отрываешь палец (имеется ввиду D-pad, креставина), так что такое не годится.
0 голосов 0 голосов # 29.08.2018 / 07:02
SuperSystem
import android.app.*;import android.content.*; import android.graphics.*; import android.os.*; import android.view.*; import android.view.View.*; import android.widget.*; public class MainActivity extends Activity { private TextView tv; private int i; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout rl = new RelativeLayout(this); tv = new TextView(this); tv.setText("0"); GameButton gb = new GameButton(this); gb.setWidth(100); gb.setHeight(50); gb.setClick(new Comand(){ public void onStart(){ tv.setText(String.valueOf(i)); tv.invalidate(); i ++; } }); rl.addView(gb); rl.addView(tv); setContentView(rl); } public class GameButton extends View { private float x,y; private float w,h; private float tx,ty; private int A; private boolean click; private Paint p; public Comand com; public GameButton(Context context){ super(context); p = new Paint(); p.setColor(0xffff0000); click = false; } public void setX(float X){ x = X; } public void setY(float Y){ y = Y; } public void setWidth(float W){ w = W; } public void setHeight(float H){ h = H; } public void setClick(Comand C){ com = C; } public void onDraw(Canvas c){ super.onDraw(c); c.drawRect(x,y,x + w,y + h,p); if (click) { com.onStart(); } invalidate(); } public boolean onTouchEvent(MotionEvent me){ tx = me.getX(); ty = me.getY(); A = me.getAction(); if (tx > x && tx < x + w && ty > y && ty < y + h){ p.setColor(0xff00ff00); click = true; } else { p.setColor(0xffff0000); click = false; } if (A == 1){ p.setColor(0xffff0000); click = false; } return true; } } interface Comand{ void onStart(); } }
29.08.2018 / 07:05
SuperSystem
Незнаю нужно или нет но может пригодиться
0 голосов
Изм. Naik
от 27.11.2017 / 20:34
Всего: 7
|
Реклама |