da ridimensionare il video in superficie vistaAndroid come ridimensionare la larghezza e l'altezza in vista di superficie per il lettore multimediale
sto giocando un video in Media Player con l'utilizzo di una visione superficiale e supporto per il video ..
// ma sull'implementazione di MediaPlayerControl su alcuni dispositivi, Micromax, iball, tablet Akash restituisce un errore del metodo astratto non disponibile come tracciato dal bug tracking ACRA.
Ora voglio avere la soluzione di problemi di cui:
Come arrivare lettore multimediale controlli attivi in tutti i dispositivi wihtout schiantarsi a causa di metodo astratto come per il regolatore dei media in alcuni dispositivi.
Come è possibile ridimensionare la vista di superficie del video.
Il codice è F9 lavorando su Samsung Galaxy GT P1000 OS 2.2 e qualche dispositivo più economico WorldTeck ecc
Ma ZiiO 7 creativa versione del sistema operativo è 2.2.1 (480 * 800)la densità di risoluzione è 160 dpi il video sembra essere ingrandito e viene rimosso dai bordi.
Il codice è il seguente:
/* Media Player Control is commented due to force close in some devices say *micromax,Creative ziio, akash etc */
public class VideoViewerActivity extends Activity implements
OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,
OnVideoSizeChangedListener, SurfaceHolder.Callback {
// implements ERROR in some devices , MediaPlayerControl
private static final String TAG = "MediaPlayerDemo";
private int mVideoWidth;
private int mVideoHeight;
private MediaPlayer mMediaPlayer;
private SurfaceView mPreview;
private SurfaceHolder holder;
private String path = "";
private Bundle extras;
private static final String MEDIA = "media";
private static final int LOCAL_AUDIO = 1;
private static final int STREAM_AUDIO = 2;
private static final int RESOURCES_AUDIO = 3;
private static final int LOCAL_VIDEO = 4;
private static final int STREAM_VIDEO = 5;
private boolean mIsVideoSizeKnown = false;
private boolean mIsVideoReadyToBePlayed = false;
/* ERROR In Abstract method implementation in the other devices */
// private MediaController mediaController;
private Context context;
private final Handler handler = new Handler();
/**
*
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.video_layout);
context = this;
path = getIntent().getExtras().getString("media");
Log.v("arpit", "path " + path);
mPreview = (SurfaceView) findViewById(R.id.surfaceview1);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
extras = getIntent().getExtras();
}
private void playVideo() {
doCleanUp();
try {
// Create a new media player and set the listeners
File f = new File(path);
// FileInputStream in = new FileInputStream(f);
RandomAccessFile randomAccessFile = new RandomAccessFile(f, "r");
// randomAccessFile.skipBytes(1024);
FileDescriptor fileDescriptor = randomAccessFile.getFD();
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(fileDescriptor, Constant.key1.length
+ Data.deviceID.length(), f.length());
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setScreenOnWhilePlaying(true);
// mediaController = new MediaController(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (Exception e) {
Log.e(TAG, "error: " + e.getMessage(), e);
Toast.makeText(context, "supported video was not found",
Toast.LENGTH_SHORT).show();
finish();
}
}
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.v(TAG, "onVideoSizeChanged called");
if (width == 0 || height == 0) {
Log.e(TAG, "invalid video width(" + width + ") or height(" + height
+ ")");
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
public void surfaceDestroyed(SurfaceHolder surfaceholder) {
Log.d(TAG, "surfaceDestroyed called");
}
public void surfaceCreated(SurfaceHolder holder) {
Log.d(TAG, "surfaceCreated called");
playVideo();
}
private void doCleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
}
private void startVideoPlayback() {
Log.v(TAG, "startVideoPlayback");
//also tried and used the below line but nothing good
// holder.setFixedSize(480, 800);
holder.setFixedSize(mVideoWidth, mVideoHeight);
mMediaPlayer.start();
}
}
provare [la mia risposta] (http://stackoverflow.com/questions/8293909/surfaceview-height-width-gets-igned/20798009#20798009). Può esserti utile. –