ユーザーが場所を変更したときに、Google マップの上でビデオを再生しようとしています。最初に activity_main.xml で、videoview は非表示に設定されています。ビデオが再生されようとしているときに、ビデオビューを表示して setZOrderOnTop(true) に設定します。
ビデオが onLocationChanged によってトリガーされると、ビデオビューは表示されません。しかし、私はビデオからオーディオを聞くことができるので、それが再生されていることを知っています.
ただし、onCreate で最初にビデオを再生すると、正常に再生され、画面に表示されます。また、onLocationChanged ビデオも再生され、画面に表示されます。
onCreate でビデオを再生しないとビデオビデオ ビューが表示されないのはなぜですか?
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView android:id="@+id/top_message"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:minWidth="110sp" android:textColor="#66CCFF"
android:textStyle="bold" android:textSize="20sp" android:text="Default Text" />
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_below="@id/top_message"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" />
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<VideoView
android:visibility="invisible"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/myVideo"
android:gravity="center"
android:layout_centerInParent="true" />
</RelativeLayout>
</FrameLayout>
MainActivity.java
public class MainActivity extends FragmentActivity implements LocationListener {
private GoogleMap googleMap;
private TextView distanceTextView;
private VideoView videoView;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// setup overlay for text
distanceTextView = (TextView)findViewById(R.id.top_message);
distanceTextView.setText("Text set onCreate");
// setup overlay for video
videoView = (VideoView) findViewById(R.id.myVideo);
// setup google map data
googleMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.setMyLocationEnabled(true);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, this);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// set current location and move map to that location
if (location != null) {
LatLng myPosition = new LatLng(location.getLatitude(),location.getLongitude());
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myPosition, 15));
}
// if below is uncommented then secondvideo will also appear
//playVideo(new String("android.resource://" + getPackageName() + "/" + R.raw.firstvideo));
}
public void onLocationChanged(Location location) {
locationManager.removeUpdates(this);
distanceTextView.setText("Location has changed");
playVideo(new String("android.resource://" + getPackageName() + "/" + R.raw.secondvideo));
}
private void playVideo(String videoFile) {
videoView.setVisibility(View.VISIBLE);
videoView.setZOrderOnTop(true);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoPath(videoFile);
videoView.start();
videoView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
videoView.setVisibility(View.INVISIBLE);
videoView.setZOrderOnTop(false);
videoView.stopPlayback();
return false;
}
});
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}