Это метод, который я довольно часто использовал в своих приложениях, и у меня все получилось:
static private int screenW = 0, screenH = 0;
@SuppressWarnings("deprecation") static public boolean onScreen(View view) {
int coordinates[] = { -1, -1 };
view.getLocationOnScreen(coordinates);
// Check if view is outside left or top
if (coordinates[0] + view.getWidth() < 0) return false;
if (coordinates[1] + view.getHeight() < 0) return false;
// Lazy get screen size. Only the first time.
if (screenW == 0 || screenH == 0) {
if (MyApplication.getSharedContext() == null) return false;
Display display = ((WindowManager)MyApplication.getSharedContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
try {
Point screenSize = new Point();
display.getSize(screenSize); // Only available on API 13+
screenW = screenSize.x;
screenH = screenSize.y;
} catch (NoSuchMethodError e) { // The backup methods will only be used if the device is running pre-13, so it's fine that they were deprecated in API 13, thus the suppress warnings annotation at the start of the method.
screenW = display.getWidth();
screenH = display.getHeight();
}
}
// Check if view is outside right and bottom
if (coordinates[0] > screenW) return false;
if (coordinates[1] > screenH) return false;
// Else, view is (at least partially) in the screen bounds
return true;
}
Чтобы использовать это, просто передайте в любом представлении или подклассе представления (IE, почти все, что рисует на экране в Android.) Он вернет true
, если он на экране, или false
, если это не .. довольно интуитивно, я думаю.
Если вы не используете вышеупомянутый метод в качестве статического, то, возможно, вы можете получить контекст другим способом, но для того, чтобы получить контекст приложения из статического метода, вам нужно выполнить следующие две вещи:
1 - Добавьте следующий атрибут к вашему тегу application
в манифесте:
android:name="com.package.MyApplication"
2 - добавить класс, расширяющий Application, примерно так:
public class MyApplication extends Application {
// MyApplication exists solely to provide a context accessible from static methods.
private static Context context;
@Override public void onCreate() {
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getSharedContext() {
return MyApplication.context;
}
}