1 голос 1613 просмотров 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 
                 | 
                                    
                                                
                        
            Реклама |