package com.youplayer.player.fullplayer; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.os.Handler; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ListView; import com.youplayer.core.adapter.YouPlayerJNICallBack; import com.youplayer.core.adapter.YouPlayerJNIUtil; import com.youplayer.core.struct.You_full_screen_player_data_to_ui.Cls_fn_related_content_t; import com.youplayer.player.R; public class YouPlayerRelativeList extends ListView{ OnSelectedListener selectedListener; LinkImageAdapter adapter; public static boolean wifi_yes =true; public static boolean user_hide=true; public static boolean hasData = false; public static boolean isShouldShow(){ return wifi_yes&&!user_hide&&hasData; } private static Bitmap default_img,default_shadow_img; public static int getRelativeWidth(){ if(default_img != null){ return (int)(default_img.getWidth()/105f * 180); } return 180; } public YouPlayerRelativeList(Context context, AttributeSet attrs) { super(context, attrs); if( default_img == null ){//列表大小字体按图片 大小进行缩放 default_img = BitmapFactory.decodeResource(getResources(), R.drawable.youplayer_link_icon_video); default_shadow_img = BitmapFactory.decodeResource(getResources(), R.drawable.youplayer_fullplayer_img_up_shadow); float p = default_img.getWidth()/105f; RelativeItem.WIDTH = (int) (180*p); RelativeItem.DIS_H = (int) (8*p); RelativeItem.TEXTSIZE = (int) (24*p);//设置关联内容文字大小 RelativeItem.HEIGHT =RelativeItem.DIS_H*3+default_shadow_img.getHeight()+RelativeItem.TEXTSIZE ; } setVisibility( isShouldShow() ? View.VISIBLE : View.INVISIBLE ); } public static Bitmap getDefaultBitmap(){ return default_img; } public static Bitmap getDefaultBoxBitmap(){ return default_shadow_img; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure( MeasureSpec.makeMeasureSpec(RelativeItem.WIDTH,MeasureSpec.EXACTLY), heightMeasureSpec); } class LinkImageAdapter extends BaseAdapter{ Cls_fn_related_content_t[] list; public void setDatas(Cls_fn_related_content_t[] list){ this.list = list; } public void clear(){ list=null; } @Override public int getCount() { return list == null ? 0 : list.length; } @Override public Object getItem(int position) { return list[position]; } @Override public long getItemId(int p) { return p; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final Cls_fn_related_content_t media = list != null ? list[position] : null ; if( media == null ) return new RelativeItem(getContext(),""); OnClickListener listener = new OnClickListener(){ @Override public void onClick(View v) { if( selectedListener != null && !seledted ){ //Log.i("lrl","selected index:"+position); seledted = selectedListener.onSelected(position); } } }; RelativeItem item; // Bitmap cache_bit = cache.getBitmap(media.pic); if( convertView == null ){ item = new RelativeItem(getContext(),media.name); item.setLayoutParams(new AbsListView.LayoutParams(RelativeItem.WIDTH,RelativeItem.HEIGHT)); } else{ item = (RelativeItem) convertView; } item.setText(media.name); item.setOnClickListener(listener); return item; } }; boolean seledted = false; public void initDatas(Cls_fn_related_content_t[] linkMedias,OnSelectedListener selectedListener) { seledted = false; this.selectedListener = selectedListener; if( adapter != null ){ adapter.clear(); adapter.notifyDataSetChanged(); adapter = null; } //removeAllViews(); adapter = new LinkImageAdapter(); adapter.setDatas(linkMedias); setAdapter(adapter); if( adapter.getCount() > 0 ) hasData = true; adapter.notifyDataSetChanged(); } Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { if(adapter != null){ adapter.notifyDataSetChanged(); } }; }; public void getImage(final String pic) { YouPlayerJNIUtil.getBitmapWithUrl(pic,new YouPlayerJNICallBack(){ @Override public void callback(Object request, Object response) { Bitmap bitmap = BitmapFactory.decodeFile(response.toString()); if( bitmap != null ){ // cache.addBitmap(pic,bitmap); handler.sendEmptyMessage(0); } } }); } public void onDestoryed(){ //Log.i("lrl","list onDestoryed"); //cache.recycle(); if( adapter != null ) { adapter.clear(); adapter.notifyDataSetChanged(); adapter = null; } hasData = false; } public int getLinkCount(){ if( adapter != null ){ return adapter.getCount(); } return 0; } public boolean isDataEquals(Cls_fn_related_content_t[] linkMedias) { return (adapter != null && linkMedias != null && linkMedias == adapter.list ); } public static interface OnSelectedListener{ public boolean onSelected(int index); public void onTouch(int action); } @Override public boolean onTouchEvent(MotionEvent ev) { if( selectedListener == null ) return super.onTouchEvent(ev); if( ev.getAction() == MotionEvent.ACTION_DOWN ){ }else if( ev.getAction() == MotionEvent.ACTION_MOVE ){ selectedListener.onTouch(MotionEvent.ACTION_MOVE); }else if( ev.getAction() == MotionEvent.ACTION_UP ){ selectedListener.onTouch(MotionEvent.ACTION_UP); } return super.onTouchEvent(ev); } } class RelativeItem extends View{ static int DIS_H = 5; static int HEIGHT = 120; static int WIDTH = 181; static int TEXTSIZE = 24; Bitmap bitmap; String text ; Paint paint ; public RelativeItem(Context context,String text){ super(context); this.text = text; paint = new Paint(); paint.setColor(0xEEFFFFFF); paint.setTextSize(TEXTSIZE); } public void setText(String text){ this.text = text; } public void setImage(Bitmap bit){ bitmap = bit; } @Override protected void onDraw(Canvas canvas) { if( getWidth() == 0 ) return; int image_h = getHeight()-TEXTSIZE - DIS_H; Bitmap defbit = YouPlayerRelativeList.getDefaultBitmap(); if( bitmap != null && !bitmap.isRecycled() ){ //canvas.drawBitmap(bitmap,(getWidth()-bitmap.getWidth())/2,(image_h-bitmap.getHeight())/2, paint); Rect tar = new Rect((getWidth()-defbit.getWidth())/2,(image_h-defbit.getHeight())/2, (getWidth()+defbit.getWidth())/2,(image_h+defbit.getHeight())/2 ); canvas.drawBitmap(bitmap, null ,tar, paint); } else{//默认图片 canvas.drawBitmap( defbit,(getWidth()-defbit.getWidth())/2,(image_h-defbit.getHeight())/2, paint); } //画边框图片 Bitmap box = YouPlayerRelativeList.getDefaultBoxBitmap(); canvas.drawBitmap(box,(getWidth()-box.getWidth())/2,(image_h-box.getHeight())/2, paint); if( text != null ){ if( paint.measureText(text)>getWidth() ){ text = format(text); } canvas.drawText(text,(getWidth()-paint.measureText(text))/2,getHeight()-DIS_H, paint); } canvas.restore(); } private String format(String str){ StringBuffer sb = new StringBuffer(str); while(true){ sb.deleteCharAt(sb.length()/2); if( getWidth() > paint.measureText(sb.toString()) ) break; } return sb.toString(); } }