package name.caiyao.microreader.ui.activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.MediaController; import android.widget.Toast; import android.widget.VideoView; import java.lang.reflect.Field; import butterknife.BindView; import butterknife.ButterKnife; import name.caiyao.microreader.R; public class VideoActivity extends AppCompatActivity { @BindView(R.id.vv_gank) VideoView vvGank; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); ButterKnife.bind(this); final String url = getIntent().getStringExtra("url"); final String shareUrl = getIntent().getStringExtra("shareUrl"); final String title = getIntent().getStringExtra("title"); vvGank.setVideoPath(url); final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage(getString(R.string.common_loading)); progressDialog.show(); vvGank.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { progressDialog.dismiss(); } }); vvGank.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { progressDialog.dismiss(); Toast.makeText(VideoActivity.this,"视频不存在或已被删除!",Toast.LENGTH_SHORT).show(); return true; } }); CustomMediaController customMediaController = new CustomMediaController(this); customMediaController.setListener(new OnMediaControllerInteractionListener() { @Override public void onShareClickListener() { Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, title + " " + shareUrl + getString(R.string.share_tail)); shareIntent.setType("text/plain"); //设置分享列表的标题,并且每次都显示分享列表 startActivity(Intent.createChooser(shareIntent, getString(R.string.share))); } }); vvGank.setMediaController(customMediaController); vvGank.start(); } public interface OnMediaControllerInteractionListener { void onShareClickListener(); } class CustomMediaController extends MediaController { Context mContext; private OnMediaControllerInteractionListener mListener; public CustomMediaController(Context context) { super(context); mContext = context; } public void setListener(OnMediaControllerInteractionListener listener) { mListener = listener; } @Override public void setAnchorView(View view) { super.setAnchorView(view); FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); frameParams.setMargins(0,50,500,0); frameParams.gravity = Gravity.RIGHT|Gravity.TOP; ImageButton fullscreenButton = (ImageButton) LayoutInflater.from(mContext) .inflate(R.layout.share_buttion, null,false); fullscreenButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(mListener != null) { mListener.onShareClickListener(); } } }); addView(fullscreenButton, frameParams); } @Override public void show(int timeout) { super.show(timeout); // fix pre Android 4.3 strange positioning when used in Fragments int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion < Build.VERSION_CODES.JELLY_BEAN_MR2) { try { Field field1 = MediaController.class.getDeclaredField("mAnchor"); field1.setAccessible(true); View mAnchor = (View)field1.get(this); Field field2 = MediaController.class.getDeclaredField("mDecor"); field2.setAccessible(true); View mDecor = (View)field2.get(this); Field field3 = MediaController.class.getDeclaredField("mDecorLayoutParams"); field3.setAccessible(true); WindowManager.LayoutParams mDecorLayoutParams = (WindowManager.LayoutParams)field3.get(this); Field field4 = MediaController.class.getDeclaredField("mWindowManager"); field4.setAccessible(true); WindowManager mWindowManager = (WindowManager)field4.get(this); // NOTE: this appears in its own Window so co-ordinates are screen co-ordinates int [] anchorPos = new int[2]; mAnchor.getLocationOnScreen(anchorPos); // we need to know the size of the controller so we can properly position it // within its space mDecor.measure(MeasureSpec.makeMeasureSpec(mAnchor.getWidth(), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(mAnchor.getHeight(), MeasureSpec.AT_MOST)); mDecor.setPadding(0,0,0,0); mDecorLayoutParams.verticalMargin = 0; mDecorLayoutParams.horizontalMargin = 0; mDecorLayoutParams.width = mAnchor.getWidth(); mDecorLayoutParams.gravity = Gravity.LEFT|Gravity.TOP; mDecorLayoutParams.x = anchorPos[0];// + (mAnchor.getWidth() - p.width) / 2; mDecorLayoutParams.y = anchorPos[1] + mAnchor.getHeight() - mDecor.getMeasuredHeight(); mWindowManager.updateViewLayout(mDecor, mDecorLayoutParams); } catch (Exception e) { e.printStackTrace(); } } } } }