最近做優酷視頻播放的時候,因爲默認的標準點擊按鈕只能彈出標準框,裏面沒有高清,超清等選項,所以自己便利優酷的自定義播放控件找到了這個標準的按鈕,重新實現了它的點擊事件,點擊時彈出,標準,高清,超清等選項框,代碼如下:
//查找標清按鈕 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?