Android穿山甲SDK接入信息流广告
生活随笔
收集整理的這篇文章主要介紹了
Android穿山甲SDK接入信息流广告
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
listView信息流
public class ProjectsAdapter extends BaseAdapter {private static final int ITEM_VIEW_TYPE_NORMAL = 0;private static final int ITEM_VIEW_TYPE_GROUP_PIC_AD = 1;private static final int ITEM_VIEW_TYPE_SMALL_PIC_AD = 2;private static final int ITEM_VIEW_TYPE_LARGE_PIC_AD = 3;private static final int ITEM_VIEW_TYPE_VIDEO = 4;private static final int ITEM_VIEW_TYPE_VERTICAL_IMG = 5;//豎版圖片private static final int ITEM_VIEW_TYPE_VIDEO_VERTICAL = 6;//豎版視頻private int mVideoCount = 0;private List<ProjectsItem> mData;private Context mContext;private Map<AdViewHolder, TTAppDownloadListener> mTTAppDownloadListenerMap = new WeakHashMap<>();public ProjectsAdapter(Context context, List<ProjectsItem> data) {this.mContext = context;this.mData = data;}@Overridepublic int getCount() {return mData.size(); // for test}@Overridepublic TTNativeExpressAd getItem(int position) {return mData.get(position).getNativeExpressAd();}@Overridepublic long getItemId(int position) {return position;}//信息流廣告的樣式,有大圖、小圖、組圖和視頻,通過ad.getImageMode()來判斷@Overridepublic int getItemViewType(int position) {TTNativeExpressAd ad= getItem(position);/*TTNativeExpressAd ad = null;if(bean!=null){ad = bean.getNativeExpressAd();}*/if (ad == null) {return ITEM_VIEW_TYPE_NORMAL;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_SMALL_IMG) {return ITEM_VIEW_TYPE_SMALL_PIC_AD;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_LARGE_IMG) {return ITEM_VIEW_TYPE_LARGE_PIC_AD;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_GROUP_IMG) {return ITEM_VIEW_TYPE_GROUP_PIC_AD;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) {return ITEM_VIEW_TYPE_VIDEO;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_VERTICAL_IMG) {return ITEM_VIEW_TYPE_VERTICAL_IMG;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO_VERTICAL || ad.getImageMode() == TTAdConstant.IMAGE_MODE_LIVE) {return ITEM_VIEW_TYPE_VIDEO_VERTICAL;} else {TToast.show(mContext, "圖片展示樣式錯誤");return ITEM_VIEW_TYPE_NORMAL;}}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TTNativeExpressAd ad = getItem(position);/*TTNativeExpressAd ad = null;if(bean!=null){ad = bean.getNativeExpressAd();}*/switch (getItemViewType(position)) {case ITEM_VIEW_TYPE_SMALL_PIC_AD:case ITEM_VIEW_TYPE_LARGE_PIC_AD:case ITEM_VIEW_TYPE_GROUP_PIC_AD:case ITEM_VIEW_TYPE_VERTICAL_IMG:case ITEM_VIEW_TYPE_VIDEO:case ITEM_VIEW_TYPE_VIDEO_VERTICAL:return getVideoView(convertView, parent, ad);default:return getNormalView(convertView, parent, position);}}//渲染視頻廣告,以視頻廣告為例,以下說明@SuppressWarnings("RedundantCast")private View getVideoView(View convertView, ViewGroup parent, @NonNull final TTNativeExpressAd ad) {final AdViewHolder adViewHolder;try {if (convertView == null) {convertView = LayoutInflater.from(mContext).inflate(R.layout.listitem_ad_native_express, parent, false);adViewHolder = new AdViewHolder();adViewHolder.videoView = (FrameLayout) convertView.findViewById(R.id.iv_listitem_express);convertView.setTag(adViewHolder);} else {adViewHolder = (AdViewHolder) convertView.getTag();}//綁定廣告數據、設置交互回調bindData(convertView, adViewHolder, ad);if (adViewHolder.videoView != null) {//獲取視頻播放view,該view SDK內部渲染,在媒體平臺可配置視頻是否自動播放等設置。View video = ad.getExpressAdView();if (video != null) {adViewHolder.videoView.removeAllViews();if (video.getParent() == null) {adViewHolder.videoView.addView(video); // ad.render();}}}} catch (Exception e) {e.printStackTrace();}return convertView;}/*** 非廣告list* @param convertView* @param parent* @param position* @return*/@SuppressWarnings("RedundantCast")@SuppressLint("SetTextI18n")private View getNormalView(View convertView, ViewGroup parent, int position) {NormalViewHolder normalViewHolder;if (convertView == null) {View v = LayoutInflater.from(mContext).inflate(R.layout.item_price, parent, false);normalViewHolder = new NormalViewHolder(v);convertView = v;convertView.setTag(normalViewHolder);} else {normalViewHolder = (NormalViewHolder) convertView.getTag();}ProjectsItem bean = mData.get(position);Glide.with(mContext).load(bean.getImgProjectMain()).into(normalViewHolder.image);normalViewHolder.introduction.setText(bean.getShortIntro());normalViewHolder.titleName.setText(bean.getName());normalViewHolder.views.setText(bean.getTesterNum() + " 人測過");return convertView;}/*** 設置廣告的不喜歡,注意:強烈建議設置該邏輯,如果不設置dislike處理邏輯,則模板廣告中的 dislike區域不響應dislike事件。** @param ad* @param customStyle 是否自定義樣式,true:樣式自定義*/private void bindDislike(final TTNativeExpressAd ad, boolean customStyle) {if (customStyle) {//使用自定義樣式DislikeInfo dislikeInfo = ad.getDislikeInfo();if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {return;}final DislikeDialog dislikeDialog = new DislikeDialog(mContext, dislikeInfo);dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {@Overridepublic void onItemClick(FilterWord filterWord) {//屏蔽廣告TToast.show(mContext, "點擊 " + filterWord.getName());//用戶選擇不喜歡原因后,移除廣告展示mData.remove(ad);notifyDataSetChanged();}});dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {@Overridepublic void onClick(PersonalizationPrompt personalizationPrompt) {TToast.show(mContext, "點擊了為什么看到此廣告");}});ad.setDislikeDialog(dislikeDialog);return;}//使用默認模板中默認dislike彈出樣式ad.setDislikeCallback((Activity) mContext, new TTAdDislike.DislikeInteractionCallback() {@Overridepublic void onShow() {}@Overridepublic void onSelected(int position, String value, boolean enforce) {TToast.show(mContext, "點擊 " + value);//用戶選擇不喜歡原因后,移除廣告展示if (enforce) {mData.remove(ad);notifyDataSetChanged();TToast.show(mContext, "NativeExpressListActivity 模版信息流 sdk強制移除View ");return;}mData.remove(ad);notifyDataSetChanged();}@Overridepublic void onCancel() {TToast.show(mContext, "點擊取消 ");}});}private void bindData(View convertView, final AdViewHolder adViewHolder, TTNativeExpressAd ad) {//設置dislike彈窗bindDislike(ad, false);switch (ad.getInteractionType()) {case TTAdConstant.INTERACTION_TYPE_DOWNLOAD:bindDownloadListener(adViewHolder, ad);break;}}private void bindDownloadListener(final AdViewHolder adViewHolder, TTNativeExpressAd ad) {TTAppDownloadListener downloadListener = new TTAppDownloadListener() {private boolean mHasShowDownloadActive = false;@Overridepublic void onIdle() {if (!isValid()) {return;}TToast.show(mContext, "點擊廣告開始下載");}@SuppressLint("SetTextI18n")@Overridepublic void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {if (!isValid()) {return;}if (!mHasShowDownloadActive) {mHasShowDownloadActive = true;TToast.show(mContext, appName + " 下載中,點擊暫停", Toast.LENGTH_LONG);}}@SuppressLint("SetTextI18n")@Overridepublic void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {if (!isValid()) {return;}TToast.show(mContext, appName + " 下載暫停", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {if (!isValid()) {return;}TToast.show(mContext, appName + " 下載失敗,重新下載", Toast.LENGTH_LONG);}@Overridepublic void onInstalled(String fileName, String appName) {if (!isValid()) {return;}TToast.show(mContext, appName + " 安裝完成,點擊打開", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFinished(long totalBytes, String fileName, String appName) {if (!isValid()) {return;}TToast.show(mContext, appName + " 下載成功,點擊安裝", Toast.LENGTH_LONG);}@SuppressWarnings("BooleanMethodIsAlwaysInverted")private boolean isValid() {return mTTAppDownloadListenerMap.get(adViewHolder) == this;}};//一個ViewHolder對應一個downloadListener, isValid判斷當前ViewHolder綁定的listener是不是自己ad.setDownloadListener(downloadListener); // 注冊下載監聽器mTTAppDownloadListenerMap.put(adViewHolder, downloadListener);}private static class AdViewHolder {FrameLayout videoView;}private static class NormalViewHolder {TextView titleName;TextView introduction;TextView views;CornerImageView image;public NormalViewHolder(View itemView) {image = itemView.findViewById(R.id.image);titleName = (TextView) itemView.findViewById(R.id.titleName);introduction = (TextView) itemView.findViewById(R.id.introduction);views = (TextView) itemView.findViewById(R.id.views);}}}listitem_ad_native_express文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"tools:ignore="HardcodedText"><FrameLayoutandroid:id="@+id/iv_listitem_express"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true" /></RelativeLayout>recyclerView信息流
public class ClassifyListAdapter extends RecyclerView.Adapter {List<BannerBean> mData;private Map<AdViewHolder, TTAppDownloadListener> mTTAppDownloadListenerMap = new WeakHashMap<>();Context mContext;private static final String TAG = "ClassifyListAdapter";private static final int FOOTER_VIEW_COUNT = 1;private static final int ITEM_VIEW_TYPE_LOAD_MORE = -1;private static final int ITEM_VIEW_TYPE_NORMAL = 0;private static final int ITEM_VIEW_TYPE_GROUP_PIC_AD = 1;private static final int ITEM_VIEW_TYPE_SMALL_PIC_AD = 2;private static final int ITEM_VIEW_TYPE_LARGE_PIC_AD = 3;private static final int ITEM_VIEW_TYPE_VIDEO = 4;private static final int ITEM_VIEW_TYPE_VERTICAL_PIC_AD = 5;//豎版圖片int layoutId;public ClassifyListAdapter(Context context, int layoutId, List<BannerBean> datas) {this.mContext = context;mRequestManager = Glide.with(mContext);this.mData = datas;this.layoutId = layoutId;}@Overridepublic int getItemCount() {int count = mData == null ? 0 : mData.size();return count + FOOTER_VIEW_COUNT;}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {RecyclerView.ViewHolder holder = null;switch (viewType) {case ITEM_VIEW_TYPE_LOAD_MORE:return new LoadMoreViewHolder(new LoadMoreView(mContext));case ITEM_VIEW_TYPE_SMALL_PIC_AD:return new SmallAdViewHolder(LayoutInflater.from(mContext).inflate(R.layout.listitem_ad_small_pic, parent, false));case ITEM_VIEW_TYPE_LARGE_PIC_AD://return new LargeAdViewHolder(LayoutInflater.from(mContext).inflate(R.layout.listitem_ad_large_pic, parent, false));case ITEM_VIEW_TYPE_VERTICAL_PIC_AD:return new VerticalAdViewHolder(LayoutInflater.from(mContext).inflate(R.layout.listitem_ad_vertical_pic, parent, false));case ITEM_VIEW_TYPE_GROUP_PIC_AD://return new GroupAdViewHolder(LayoutInflater.from(mContext).inflate(R.layout.listitem_ad_group_pic, parent, false));case ITEM_VIEW_TYPE_VIDEO://return new VideoAdViewHolder(LayoutInflater.from(mContext).inflate(R.layout.listitem_ad_large_video, parent, false));default:return new NormalViewHolder(LayoutInflater.from(mContext).inflate(layoutId, parent, false));}}@SuppressLint("SetTextI18n")@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {int count = mData.size();TTFeedAd ttFeedAd;try {if (holder instanceof SmallAdViewHolder) {ttFeedAd = mData.get(position).getFeedAd();SmallAdViewHolder smallAdViewHolder = (SmallAdViewHolder) holder;ArrayList<View> images = new ArrayList<>();images.add(((SmallAdViewHolder) holder).mSmallImage);bindData(smallAdViewHolder, images, ttFeedAd);if (ttFeedAd.getImageList() != null && !ttFeedAd.getImageList().isEmpty()) {TTImage image = ttFeedAd.getImageList().get(0);if (image != null && image.isValid()) {mRequestManager.load(image.getImageUrl()).into(smallAdViewHolder.mSmallImage);}}} else if (holder instanceof LargeAdViewHolder) {ttFeedAd = mData.get(position).getFeedAd();LargeAdViewHolder largeAdViewHolder = (LargeAdViewHolder) holder;ArrayList<View> images = new ArrayList<>();images.add(((LargeAdViewHolder) holder).mLargeImage);bindData(largeAdViewHolder, images, ttFeedAd);if (ttFeedAd.getImageList() != null && !ttFeedAd.getImageList().isEmpty()) {TTImage image = ttFeedAd.getImageList().get(0);if (image != null && image.isValid()) {mRequestManager.load(image.getImageUrl()).into(largeAdViewHolder.mLargeImage);}}} else if (holder instanceof VerticalAdViewHolder) {ttFeedAd = mData.get(position).getFeedAd();VerticalAdViewHolder verticalAdViewHolder = (VerticalAdViewHolder) holder;ArrayList<View> images = new ArrayList<>();images.add((((VerticalAdViewHolder) holder).mVerticalImage));bindData(verticalAdViewHolder, images, ttFeedAd);if (ttFeedAd.getImageList() != null && !ttFeedAd.getImageList().isEmpty()) {TTImage image = ttFeedAd.getImageList().get(0);if (image != null && image.isValid()) {mRequestManager.load(image.getImageUrl()).into(verticalAdViewHolder.mVerticalImage);}}} else if (holder instanceof GroupAdViewHolder) {ttFeedAd = mData.get(position).getFeedAd();GroupAdViewHolder groupAdViewHolder = (GroupAdViewHolder) holder;ArrayList<View> images = new ArrayList<>();images.add(((GroupAdViewHolder) holder).mGroupImage1);images.add(((GroupAdViewHolder) holder).mGroupImage2);images.add(((GroupAdViewHolder) holder).mGroupImage3);bindData(groupAdViewHolder, images, ttFeedAd);if (ttFeedAd.getImageList() != null && ttFeedAd.getImageList().size() >= 3) {TTImage image1 = ttFeedAd.getImageList().get(0);TTImage image2 = ttFeedAd.getImageList().get(1);TTImage image3 = ttFeedAd.getImageList().get(2);if (image1 != null && image1.isValid()) {mRequestManager.load(image1.getImageUrl()).into(groupAdViewHolder.mGroupImage1);}if (image2 != null && image2.isValid()) {mRequestManager.load(image2.getImageUrl()).into(groupAdViewHolder.mGroupImage2);}if (image3 != null && image3.isValid()) {mRequestManager.load(image3.getImageUrl()).into(groupAdViewHolder.mGroupImage3);}}} else if (holder instanceof VideoAdViewHolder) {ttFeedAd = mData.get(position).getFeedAd();final VideoAdViewHolder videoAdViewHolder = (VideoAdViewHolder) holder;ArrayList<View> images = new ArrayList<>();images.add(((VideoAdViewHolder) holder).videoView);bindData(videoAdViewHolder, images, ttFeedAd);ttFeedAd.setVideoAdListener(new TTFeedAd.VideoAdListener() {@Overridepublic void onVideoLoad(TTFeedAd ad) {}@Overridepublic void onVideoError(int errorCode, int extraCode) {}@Overridepublic void onVideoAdStartPlay(TTFeedAd ad) {}@Overridepublic void onVideoAdPaused(TTFeedAd ad) {}@Overridepublic void onVideoAdContinuePlay(TTFeedAd ad) {}@Overridepublic void onProgressUpdate(long current, long duration) {}@Overridepublic void onVideoAdComplete(TTFeedAd ad) {}});if (videoAdViewHolder.videoView != null) {View video = ttFeedAd.getAdView();videoAdViewHolder.videoView.post(new Runnable() {@Overridepublic void run() {int width = videoAdViewHolder.videoView.getWidth();int videoWidth = ttFeedAd.getAdViewWidth();int videoHeight = ttFeedAd.getAdViewHeight();// 根據廣告View的寬高比,將adViewHolder.videoView的高度動態改變UIUtils.setViewSize(videoAdViewHolder.videoView, width, (int) (width / (videoWidth / (double) videoHeight)));}});if (video != null) {if (video.getParent() == null) {videoAdViewHolder.videoView.removeAllViews();videoAdViewHolder.videoView.addView(video);}}}} else if (holder instanceof NormalViewHolder) {NormalViewHolder normalViewHolder = (NormalViewHolder) holder;BannerBean bean = mData.get(position);Glide.with(mContext).load(bean.getImage()).into(normalViewHolder.image);normalViewHolder.introduction.setText(bean.getIntroduction());normalViewHolder.titleName.setText(bean.getTitle());normalViewHolder.views.setText(bean.getViews() + " 人測過");normalViewHolder.itemView.setOnClickListener(new MyOnClick(onItemClick,position,normalViewHolder.itemView));} else if (holder instanceof LoadMoreViewHolder) {LoadMoreViewHolder loadMoreViewHolder = (LoadMoreViewHolder) holder;}if (holder instanceof LoadMoreViewHolder) {holder.itemView.setBackgroundColor(Color.TRANSPARENT);} else if (holder instanceof SmallAdViewHolder ||holder instanceof VideoAdViewHolder ||holder instanceof LargeAdViewHolder ||holder instanceof GroupAdViewHolder ||holder instanceof VerticalAdViewHolder) {holder.itemView.setBackgroundColor(Color.WHITE);} else {// holder.itemView.setBackgroundColor(getColorRandom());}} catch (Exception e) {LogUtils.v(e.toString());}}private int getColorRandom() {int a = Double.valueOf(Math.random() * 255).intValue();int r = Double.valueOf(Math.random() * 255).intValue();int g = Double.valueOf(Math.random() * 255).intValue();int b = Double.valueOf(Math.random() * 255).intValue();return Color.argb(a, r, g, b);}@Overridepublic int getItemViewType(int position) {if (mData != null) {int count = mData.size();if (position >= count) {return ITEM_VIEW_TYPE_LOAD_MORE;} else {TTFeedAd ad = mData.get(position).getFeedAd();if (ad == null) {return ITEM_VIEW_TYPE_NORMAL;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_SMALL_IMG) {return ITEM_VIEW_TYPE_SMALL_PIC_AD;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_LARGE_IMG) {return ITEM_VIEW_TYPE_LARGE_PIC_AD;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_GROUP_IMG) {return ITEM_VIEW_TYPE_GROUP_PIC_AD;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO || ad.getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO_VERTICAL || ad.getImageMode() == TTAdConstant.IMAGE_MODE_LIVE) {return ITEM_VIEW_TYPE_VIDEO;} else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_VERTICAL_IMG) {//豎版圖片return ITEM_VIEW_TYPE_VERTICAL_PIC_AD;} else {TToast.show(mContext, "圖片展示樣式錯誤");return ITEM_VIEW_TYPE_NORMAL;}}}return super.getItemViewType(position);}@Overridepublic void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {super.onAttachedToRecyclerView(recyclerView);/* RecyclerView.LayoutManager layout = recyclerView.getLayoutManager();if (layout != null && layout instanceof GridLayoutManager) {final GridLayoutManager manager = (GridLayoutManager) layout;manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {int type = getItemViewType(position);if (type == ITEM_VIEW_TYPE_LOAD_MORE || type == ITEM_VIEW_TYPE_VIDEO) {return manager.getSpanCount();}return 1;}});}*/}@Overridepublic void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {//noinspection uncheckedsuper.onViewAttachedToWindow(holder);/* ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();if (lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams) {int position = holder.getLayoutPosition();int type = getItemViewType(position);if (type == ITEM_VIEW_TYPE_LOAD_MORE || type == ITEM_VIEW_TYPE_VIDEO) {StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;p.setFullSpan(true);}}*/}@SuppressWarnings({"CanBeFinal", "WeakerAccess"})private static class LoadMoreViewHolder extends RecyclerView.ViewHolder {TextView mTextView;ProgressBar mProgressBar;@SuppressWarnings("RedundantCast")public LoadMoreViewHolder(View itemView) {super(itemView);itemView.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));mTextView = (TextView) itemView.findViewById(R.id.tv_load_more_tip);mProgressBar = (ProgressBar) itemView.findViewById(R.id.pb_load_more_progress);}}private static class AdViewHolder extends RecyclerView.ViewHolder {ImageView mIcon;ImageView mDislike;TextView mCreativeButton;TextView mTitle;TextView mDescription;TextView mSource;TextView mStopButton;TextView mRemoveButton;public AdViewHolder(View itemView) {super(itemView);}}private RequestManager mRequestManager;private void bindData(final AdViewHolder adViewHolder, List<View> images, TTFeedAd ad) {//設置dislike彈窗bindDislikeAction(adViewHolder.mDislike, ad, false);//可以被點擊的view, 也可以把convertView放進來意味item可被點擊List<View> clickViewList = new ArrayList<>();clickViewList.add(adViewHolder.itemView);//觸發創意廣告的view(點擊下載或撥打電話)List<View> creativeViewList = new ArrayList<>();creativeViewList.add(adViewHolder.mCreativeButton);//如果需要點擊圖文區域也能進行下載或者撥打電話動作,請將圖文區域的view傳入 // creativeViewList.add(convertView);//重要! 這個涉及到廣告計費,必須正確調用。convertView必須使用ViewGroup。ad.registerViewForInteraction((ViewGroup) adViewHolder.itemView, images, clickViewList, creativeViewList, adViewHolder.mDislike, new TTNativeAd.AdInteractionListener() {@Overridepublic void onAdClicked(View view, TTNativeAd ad) {if (ad != null) {TToast.show(mContext, "廣告" + ad.getTitle() + "被點擊");}}@Overridepublic void onAdCreativeClick(View view, TTNativeAd ad) {if (ad != null) {TToast.show(mContext, "廣告" + ad.getTitle() + "被創意按鈕被點擊");}}@Overridepublic void onAdShow(TTNativeAd ad) {if (ad != null) {TToast.show(mContext, "廣告" + ad.getTitle() + "展示");}}});adViewHolder.mTitle.setText(ad.getTitle());adViewHolder.mDescription.setText(ad.getDescription());adViewHolder.mSource.setText(ad.getSource() == null ? "廣告來源" : ad.getSource());TTImage icon = ad.getIcon();if (icon != null && icon.isValid()) {mRequestManager.load(icon.getImageUrl()).into(adViewHolder.mIcon);}TextView adCreativeButton = adViewHolder.mCreativeButton;switch (ad.getInteractionType()) {case TTAdConstant.INTERACTION_TYPE_DOWNLOAD://如果初始化ttAdManager.createAdNative(getApplicationContext())沒有傳入activity 則需要在此傳activity,否則影響使用Dislike邏輯if (mContext instanceof Activity) {ad.setActivityForDownloadApp((Activity) mContext);}adCreativeButton.setVisibility(View.VISIBLE);adViewHolder.mStopButton.setVisibility(View.VISIBLE);adViewHolder.mRemoveButton.setVisibility(View.VISIBLE);bindDownloadListener(adCreativeButton, adViewHolder, ad);//綁定下載狀態控制器bindDownLoadStatusController(adViewHolder, ad);break;case TTAdConstant.INTERACTION_TYPE_DIAL:adCreativeButton.setVisibility(View.VISIBLE);adCreativeButton.setText("立即撥打");adViewHolder.mStopButton.setVisibility(View.GONE);adViewHolder.mRemoveButton.setVisibility(View.GONE);break;case TTAdConstant.INTERACTION_TYPE_LANDING_PAGE:case TTAdConstant.INTERACTION_TYPE_BROWSER: // adCreativeButton.setVisibility(View.GONE);adCreativeButton.setVisibility(View.VISIBLE);adCreativeButton.setText("查看詳情");adViewHolder.mStopButton.setVisibility(View.GONE);adViewHolder.mRemoveButton.setVisibility(View.GONE);break;default:adCreativeButton.setVisibility(View.GONE);adViewHolder.mStopButton.setVisibility(View.GONE);adViewHolder.mRemoveButton.setVisibility(View.GONE);TToast.show(mContext, "交互類型異常");}}/*** 綁定dislike邏輯** @param dislike* @param ad* @param isCustomDislike 是否使用自定義dislike 默認false*/private void bindDislikeAction(View dislike, final TTFeedAd ad, boolean isCustomDislike) {if (isCustomDislike) {// 使用自定義Dislikefinal DislikeInfo dislikeInfo = ad.getDislikeInfo();if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {return;}final DislikeDialog dislikeDialog = new DislikeDialog(mContext, dislikeInfo);dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {@Overridepublic void onItemClick(FilterWord filterWord) {mData.remove(ad);notifyDataSetChanged();}});dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {@Overridepublic void onClick(PersonalizationPrompt personalizationPrompt) {TToast.show(mContext, "點擊了為什么看到此廣告");}});ad.setDislikeDialog(dislikeDialog);dislike.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dislikeDialog.show();}});} else {final TTAdDislike ttAdDislike = ad.getDislikeDialog((Activity) mContext);if (ttAdDislike != null) {ad.getDislikeDialog((Activity) mContext).setDislikeInteractionCallback(new TTAdDislike.DislikeInteractionCallback() {@Overridepublic void onShow() {}@Overridepublic void onSelected(int position, String value, boolean enforce) {mData.remove(ad);notifyDataSetChanged();if (enforce) {TToast.show(mContext, "FeedRecyclerActivity 原生信息流 sdk強制移除View ");}}@Overridepublic void onCancel() {}});}dislike.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ttAdDislike.showDislikeDialog();}});}}private void bindDownloadListener(final TextView adCreativeButton, final AdViewHolder adViewHolder, TTFeedAd ad) {TTAppDownloadListener downloadListener = new TTAppDownloadListener() {@Overridepublic void onIdle() {if (!isValid()) {return;}adCreativeButton.setText("開始下載");adViewHolder.mStopButton.setText("開始下載");}@SuppressLint("SetTextI18n")@Overridepublic void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {if (!isValid()) {return;}if (totalBytes <= 0L) {adCreativeButton.setText("0%");} else {adCreativeButton.setText((currBytes * 100 / totalBytes) + "%");}adViewHolder.mStopButton.setText("下載中");}@SuppressLint("SetTextI18n")@Overridepublic void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {if (!isValid()) {return;}if (totalBytes <= 0L) {adCreativeButton.setText("0%");} else {adCreativeButton.setText((currBytes * 100 / totalBytes) + "%");}adViewHolder.mStopButton.setText("下載暫停");}@Overridepublic void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {if (!isValid()) {return;}adCreativeButton.setText("重新下載");adViewHolder.mStopButton.setText("重新下載");}@Overridepublic void onInstalled(String fileName, String appName) {if (!isValid()) {return;}adCreativeButton.setText("點擊打開");adViewHolder.mStopButton.setText("點擊打開");}@Overridepublic void onDownloadFinished(long totalBytes, String fileName, String appName) {if (!isValid()) {return;}adCreativeButton.setText("點擊安裝");adViewHolder.mStopButton.setText("點擊安裝");}@SuppressWarnings("BooleanMethodIsAlwaysInverted")private boolean isValid() {return mTTAppDownloadListenerMap.get(adViewHolder) == this;}};//一個ViewHolder對應一個downloadListener, isValid判斷當前ViewHolder綁定的listener是不是自己ad.setDownloadListener(downloadListener); // 注冊下載監聽器mTTAppDownloadListenerMap.put(adViewHolder, downloadListener);}private void bindDownLoadStatusController(AdViewHolder adViewHolder, final TTFeedAd ad) {final DownloadStatusController controller = ad.getDownloadStatusController();adViewHolder.mStopButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (controller != null) {controller.changeDownloadStatus();TToast.show(mContext, "改變下載狀態");Log.d(TAG, "改變下載狀態");}}});adViewHolder.mRemoveButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (controller != null) {controller.cancelDownload();TToast.show(mContext, "取消下載");Log.d(TAG, "取消下載");}}});}@SuppressWarnings("WeakerAccess")private static class VideoAdViewHolder extends AdViewHolder {@SuppressWarnings("CanBeFinal")FrameLayout videoView;@SuppressWarnings("RedundantCast")public VideoAdViewHolder(View itemView) {super(itemView);mDislike = (ImageView) itemView.findViewById(R.id.iv_listitem_dislike);mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title);mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc);mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source);videoView = (FrameLayout) itemView.findViewById(R.id.iv_listitem_video);mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon);mCreativeButton = (TextView) itemView.findViewById(R.id.btn_listitem_creative);mStopButton = (TextView) itemView.findViewById(R.id.btn_listitem_stop);mRemoveButton = (TextView) itemView.findViewById(R.id.btn_listitem_remove);}}private static class LargeAdViewHolder extends AdViewHolder {ImageView mLargeImage;@SuppressWarnings("RedundantCast")public LargeAdViewHolder(View itemView) {super(itemView);mDislike = (ImageView) itemView.findViewById(R.id.iv_listitem_dislike);mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title);mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc);mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source);mLargeImage = (ImageView) itemView.findViewById(R.id.iv_listitem_image);mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon);mCreativeButton = (TextView) itemView.findViewById(R.id.btn_listitem_creative);mStopButton = (TextView) itemView.findViewById(R.id.btn_listitem_stop);mRemoveButton = (TextView) itemView.findViewById(R.id.btn_listitem_remove);}}private static class NormalViewHolder extends RecyclerView.ViewHolder {TextView titleName;TextView introduction;TextView views;CornerImageView image;@SuppressWarnings("RedundantCast")public NormalViewHolder(View itemView) {super(itemView);image = itemView.findViewById(R.id.image);titleName = (TextView) itemView.findViewById(R.id.titleName);introduction = (TextView) itemView.findViewById(R.id.introduction);views = (TextView) itemView.findViewById(R.id.views);}}private static class SmallAdViewHolder extends AdViewHolder {ImageView mSmallImage;@SuppressWarnings("RedundantCast")public SmallAdViewHolder(View itemView) {super(itemView);mDislike = (ImageView) itemView.findViewById(R.id.iv_listitem_dislike);mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title);mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source);mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc);mSmallImage = (ImageView) itemView.findViewById(R.id.iv_listitem_image);mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon);mCreativeButton = (TextView) itemView.findViewById(R.id.btn_listitem_creative);mStopButton = (TextView) itemView.findViewById(R.id.btn_listitem_stop);mRemoveButton = (TextView) itemView.findViewById(R.id.btn_listitem_remove);}}private static class VerticalAdViewHolder extends AdViewHolder {ImageView mVerticalImage;@SuppressWarnings("RedundantCast")public VerticalAdViewHolder(View itemView) {super(itemView);mDislike = (ImageView) itemView.findViewById(R.id.iv_listitem_dislike);mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title);mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source);mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc);mVerticalImage = (ImageView) itemView.findViewById(R.id.iv_listitem_image);mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon);mCreativeButton = (TextView) itemView.findViewById(R.id.btn_listitem_creative);mStopButton = (TextView) itemView.findViewById(R.id.btn_listitem_stop);mRemoveButton = (TextView) itemView.findViewById(R.id.btn_listitem_remove);}}@SuppressWarnings("CanBeFinal")private static class GroupAdViewHolder extends AdViewHolder {ImageView mGroupImage1;ImageView mGroupImage2;ImageView mGroupImage3;@SuppressWarnings("RedundantCast")public GroupAdViewHolder(View itemView) {super(itemView);mDislike = (ImageView) itemView.findViewById(R.id.iv_listitem_dislike);mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title);mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source);mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc);mGroupImage1 = (ImageView) itemView.findViewById(R.id.iv_listitem_image1);mGroupImage2 = (ImageView) itemView.findViewById(R.id.iv_listitem_image2);mGroupImage3 = (ImageView) itemView.findViewById(R.id.iv_listitem_image3);mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon);mCreativeButton = (TextView) itemView.findViewById(R.id.btn_listitem_creative);mStopButton = (TextView) itemView.findViewById(R.id.btn_listitem_stop);mRemoveButton = (TextView) itemView.findViewById(R.id.btn_listitem_remove);}}public OnItemClick onItemClick;public void setOnItemClick( OnItemClick onItemClick){this.onItemClick=onItemClick;} } xml文件可以復制sdk中的xml,樣式可以自己修改總結
以上是生活随笔為你收集整理的Android穿山甲SDK接入信息流广告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用Java反序列化漏洞在Windows
- 下一篇: Advanced Rails - Rai