最近做優酷視訊播放的時候,因為預設的标準點選按鈕隻能彈出标準框,裡面沒有高清,超清等選項,是以自己便利優酷的自定義播放控件找到了這個标準的按鈕,重新實作了它的點選事件,點選時彈出,标準,高清,超清等選項框,代碼如下:
//查找标清按鈕
private void findView(ViewGroup group){
final ArrayList<String> qualityList = new ArrayList<String>();
qualityList.add(getResources().getString(R.string.string_liuchang));
qualityList.add(getResources().getString(R.string.string_biaoqing));
qualityList.add(getResources().getString(R.string.string_gaoqing));
qualityList.add(getResources().getString(R.string.string_chaoqing));
qualityList.add(getResources().getString(R.string.string_yuanhua));
for(int i=0;i<group.getChildCount();i++){
if(group.getChildAt(i) instanceof TextView){
if(((TextView) group.getChildAt(i)).getText().toString().equals("标清")){
Set set= videoView.getVideoSupportQuality();
List<String> stringList=videoView.getVideoSupportQualityStr();
for (int k=0;k<stringList.size();k++){
Log.e("視訊的品質有",stringList.get(k) +"品質類型有"+set.size());
}
final TextView textView=((TextView) group.getChildAt(i));
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("tag","點選了标清");
Toast.makeText(VideoActivity.this,"标清",Toast.LENGTH_SHORT).show();
//彈出超清框
ListView listView = new ListView(VideoActivity.this);
// listView.setBackgroundColor(getResources().getColor(R.color.color_black));
listView.setAdapter(new ArrayAdapter<String>(VideoActivity.this, R.layout.item_biaoqing, qualityList));
final PopupWindow window = new PopupWindow(VideoActivity.this);
window.setHeight(600);
window.setWidth(300);
window.setContentView(listView);
// TODO: 2016/5/17 設定背景顔色
window.setBackgroundDrawable(new BitmapDrawable());
// TODO: 2016/5/17 設定可以擷取焦 點
window.setFocusable(true);
// TODO: 2016/5/17 設定可以觸摸彈出框以外的區域
window.setOutsideTouchable(true);
// TODO: 2016/5/17 以下拉的方式顯示,并且可以設定顯示的位置
int popupWidth = listView.getMeasuredWidth();
int popupHeight = listView.getMeasuredHeight();
int[] location = new int[2];
//v.getLocationOnScreen(location);
window.showAsDropDown(textView);
// window.showAtLocation(v, Gravity.TOP, 0, 0);
//設定标清,高清的選中事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
window.dismiss();
videoView.changeQuality(position);
textView.setText(qualityList.get(position).toString()+position);
}
});
}
});
}
}else if(group.getChildAt(i) instanceof ViewGroup){
findView(((ViewGroup) group.getChildAt(i)));
}
}
}
布局代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textColor="@color/color_white"
android:background="@color/color_black"/>
其實核心代碼就兩個判斷:一是判斷是否是View,第二個判斷是否是viewGroup?