A> typdef помогает в значении и документировании программы, позволяя создавать более значимые синонимы для типов данных . Кроме того, они помогают параметризовать программу с учетом проблем переносимости (K & amp; R, pg147, C prog lang).
B> структура определяет тип . Structs позволяет удобно группировать набор переменных для удобства обработки (K & amp; R, pg127, C prog lang.) Как единое целое
C> typedef'ing структурой, как объяснено в разделе A выше.
D> Для меня структуры - это пользовательские типы или контейнеры, или коллекции, или пространства имен, или сложные типы, тогда как typdef - это просто средство для создания дополнительных псевдонимов.
Хорошо для тех, кто хочет знать, что я сделал ... я не мог. Я сделал обходной путь, чтобы просто узнать, был ли нажат конкретный компонент моего вида, поэтому я мог закончить только этим:
if(isPointInsideView(ev.getRawX(), ev.getRawY(), myViewComponent)){
doSomething()
}
и методом:
/**
* Determines if given points are inside view
* @param x - x coordinate of point
* @param y - y coordinate of point
* @param view - view object to compare
* @return true if the points are within view bounds, false otherwise
*/
public static boolean isPointInsideView(float x, float y, View view){
int location[] = new int[2];
view.getLocationOnScreen(location);
int viewX = location[0];
int viewY = location[1];
//point is inside view bounds
if(( x > viewX && x < (viewX + view.getWidth())) &&
( y > viewY && y < (viewY + view.getHeight()))){
return true;
} else {
return false;
}
}
Однако это работает только для Известные виды в макете, которые вы можете передать в качестве параметра, я все еще не могу получить щелчковый вид, просто зная координаты. Вы можете искать все виды в макете.
Простой способ получения касанного представления - установить OnTouchListener для отдельных представлений и сохранить представление в переменной класса действия. Возвращение false сделает входное событие доступным для метода onTouchEvent () действия, где вы можете легко обрабатывать все сенсорные события (в том числе и события вашего родительского представления).
myView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
touchedView = myView;
return false;
}
});
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
if(touchedView!=null) {
doStuffWithMyView(touchedView);
....
....
Просто чтобы сделать способ хтафоя проще:
/**
* Determines if given points are inside view
* @param x - x coordinate of point
* @param y - y coordinate of point
* @param view - view object to compare
* @return true if the points are within view bounds, false otherwise
*/
private boolean isPointInsideView(float x, float y, View view) {
int location[] = new int[2];
view.getLocationOnScreen(location);
int viewX = location[0];
int viewY = location[1];
// point is inside view bounds
return ((x > viewX && x < (viewX + view.getWidth())) &&
(y > viewY && y < (viewY + view.getHeight())));
}