2016-12-18 4 views
1

У меня есть пользовательский вид с onTouchEvent, где я устанавливаю mX и mY.Как получить координаты из пользовательского вида android

mx=event.getX(); 
my=event.getY(); 

это для получения пути рисования сенсорного события - работа велики, и я могу видеть координаты в моем текстовом виде, который определен в основной деятельности.

Я хочу использовать это 2 атрибутов в моем основном макете деятельности для установки цвета фона , например

if (mx > 1000 && my > 100){ 
set color 
} 

но мне кажется, что тй и мои не получает какие-либо значений то, что я пытался İŞ

custom_view paintview = (custom_view) findViewById(R.id.custum_view_id) 
float mx =paintview.getmx(); 
float my =paintview.getmy(); 

Возможно, я не определил getmx правильно в пользовательском представлении?

public float getmx(){ 
return mx; 
} 

Я новичок в Java и андроид так легко со мной :)

добавления MainActiviy.

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // Drawing - custom view 
     drawView = (Drawing) findViewById(R.id.drawing); 

     findCoordinates(); 

     TextView Coordinates = (TextView) findViewById(R.id.CNcoordinates); 

     //Coordinates - message with coordinates 
     paintView.setTextView(Coordinates); 

    } 

    private Drawing drawView; 


    public void findCoordinates() { 
     Drawing paintView = (Drawing) findViewById(R.id.drawing); 
     float xX = drawView.getmX(); 
     float yY = drawView.getmY(); 
     int nColor = Color.BLUE; 
     View buttonmove1 = findViewById(R.id.layoutMove); 
     if (Math.abs(xX) > 1000 && Math.abs(yY) > 1000) { 
      buttonmove1.setBackgroundColor(nColor); 
     } 
    } 

координаты приходят из:

protected void onDraw(Canvas canvas) { 
     canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); 
     canvas.drawPath(drawPath, drawPaint); 
    } 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     mX = event.getX(); 
     mY = event.getY(); 

     View buttonmove = findViewById(R.id.drawing); 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       drawPath.moveTo(mX, mY); 

       if(myCoordinates!=null){ 
        myCoordinates.setText(":" + mX + " , " + ":" + mY); 
       } 
       break; 




public void setTextView(TextView tv){ 
     myCoordinates = tv; 
    } 
+0

От того, где вы пытаетесь получить X, Y координаты? В onCreate()? – Rahul

+0

в MainActivity.java im, устанавливая их в onTouchEvents на custom_view. – user7258123

+0

холст рисунок в пользовательском представлении – user7258123

ответ

0

Использование интерфейса или обратного вызова после завершения вашего TouchEvent. Вы должны повторно обратить ваш

findCoordinates()

так будет обновлять пользовательский интерфейс уважения к новым ценностям.

+0

вы можете привести пример кода? – user7258123

+0

Проверьте, как использовать интерфейсы для связи или обратного вызова. – Rahul

0

я удается использовать OnViewTouchListener в качестве обратного вызова:

добавление метода в настраиваемое представление:

private OnViewTouchListener OnViewTouchListener; 
public interface OnViewTouchListener { 
public void onViewTouched (float x, float y, boolean touched); 
} 

public void setOnViewTouchListener (OnViewTouchListener listener){ 
OnViewTouchListener = listener; 
}