From a8fad18ea31ad23c98fd77174c0cdd4bad0de8ea Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 08 四月 2021 19:11:01 +0800 Subject: [PATCH] 新版搜索过渡页优化 --- BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java | 241 +++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 206 insertions(+), 35 deletions(-) diff --git a/BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java b/BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java index d0cf63b..ea1f102 100644 --- a/BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java +++ b/BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchActivity.java @@ -4,28 +4,34 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; import android.os.Build; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; +import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; +import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; +import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; @@ -34,6 +40,8 @@ import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.lcjian.library.util.common.StringUtils; +import com.lcjian.library.widget.FlowLayout; +import com.lcjian.library.widget.MyGridView; import com.qq.e.ads.cfg.VideoOption; import com.qq.e.ads.nativ.ADSize; import com.qq.e.ads.nativ.NativeExpressAD; @@ -45,6 +53,7 @@ import com.weikou.beibeivideo.entity.ad.AdPositionEnum; import com.weikou.beibeivideo.entity.ad.ExpressAdContainer; import com.weikou.beibeivideo.ui.BaseActivity; +import com.weikou.beibeivideo.ui.common.GridVideoAdapter1; import com.weikou.beibeivideo.ui.video.SuggestKeysAdapter; import com.weikou.beibeivideo.util.BeibeiConstant; import com.weikou.beibeivideo.R; @@ -54,9 +63,13 @@ import com.weikou.beibeivideo.util.ui.TopStatusSettings; import org.apache.http.Header; +import org.json.JSONArray; import org.json.JSONObject; +import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; import java.util.List; public class SearchActivity extends BaseActivity implements OnClickListener { @@ -69,9 +82,9 @@ private GridView gv_hot_search; - private GridView gv_history_search; + private FlowLayout fl_history_search; - private LinearLayout ll_search_history; + private LinearLayout ll_search_history, ll_search_rank; private SearchSuggestFragment suggestFragment; @@ -87,14 +100,16 @@ fl_advertisement.setOnClickListener(this); tv_search_cancel = findViewById(R.id.tv_search_cancel); gv_hot_search = findViewById(R.id.gv_hot_search); - gv_history_search = findViewById(R.id.gv_history_search); + fl_history_search = findViewById(R.id.fl_history_search); tv_clear = findViewById(R.id.tv_search_clear_his); ll_search_history = findViewById(R.id.ll_search_history); fl_suggest = findViewById(R.id.fl_suggest); + ll_search_rank = findViewById(R.id.ll_search_rank); } @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); setContentView(R.layout.search_actvity); TopStatusSettings.setStatusViewAndDeepColor(this); @@ -105,7 +120,7 @@ @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { - Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class); + if (StringUtils.isEmpty(et_search_key.getEditableText() .toString()) && StringUtils.isEmpty(et_search_key.getHint() .toString())) { @@ -114,13 +129,13 @@ } else { if (!StringUtils.isEmpty(et_search_key.getEditableText() .toString())) { - intent.putExtra("key", et_search_key.getEditableText() + jumpToSearch(et_search_key.getEditableText() .toString()); } else { - intent.putExtra("key", et_search_key.getHint()); + jumpToSearch(et_search_key.getHint() + ""); } } - startActivity(intent); + return true; } @@ -203,23 +218,7 @@ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - Intent intent = new Intent(SearchActivity.this, - SearchResultActivity.class); - intent.putExtra("key", - (String) parent.getItemAtPosition(position)); - startActivity(intent); - } - }); - gv_history_search.setOnItemClickListener(new OnItemClickListener() { - - @Override - public void onItemClick(AdapterView<?> parent, View view, - int position, long id) { - Intent intent = new Intent(SearchActivity.this, - SearchResultActivity.class); - intent.putExtra("key", - (String) parent.getItemAtPosition(position)); - startActivity(intent); + jumpToSearch((String) parent.getItemAtPosition(position)); } }); @@ -228,6 +227,7 @@ getHotSearch(); getHistorySearch(); initAdvertisement();// 骞跨偣閫氬箍鍛� + getSearchRank(); } @Override @@ -278,10 +278,7 @@ suggestFragment.setItemClickListener(new SearchSuggestFragment.OnItemClickListener() { @Override public void onClick(String st) { - Intent intent = new Intent(SearchActivity.this, - SearchResultActivity.class); - intent.putExtra("key", st); - startActivity(intent); + jumpToSearch(st); hiddenSuggestFragment(); } }); @@ -340,13 +337,35 @@ if (!StringUtils.isBlank(historyStr)) { String[] historyArray = historyStr.split(","); ll_search_history.setVisibility(View.VISIBLE); - List<String> history = new ArrayList<String>(); + List<String> history = new ArrayList<>(); for (int i = 0; i < 10 && i < historyArray.length; i++) { if (!TextUtils.isEmpty(historyArray[historyArray.length - 1 - i])) { - history.add(historyArray[historyArray.length - 1 - i]); + String st = historyArray[historyArray.length - 1 - i]; + if (st != null && !history.contains(st.trim())) + history.add(st.trim()); } } - gv_history_search.setAdapter(new GridSuggestionAdapter(history, false)); + + fl_history_search.removeAllViews(); + for (String st : history) { + TextView textView = new TextView(getApplicationContext()); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextSize(13); + textView.setPadding(DimenUtils.dip2px(getApplicationContext(), 20), DimenUtils.dip2px(getApplicationContext(), 5), DimenUtils.dip2px(getApplicationContext(), 20), DimenUtils.dip2px(getApplicationContext(), 5)); + textView.setText(st); + textView.setTextColor(getResources().getColor(R.color.search_item_text_color)); + textView.setBackgroundResource(R.drawable.shape_search_history_item_bg); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); + params.setMargins(0, DimenUtils.dip2px(getApplicationContext(), 15), DimenUtils.dip2px(getApplicationContext(), 13), 0); + textView.setLayoutParams(params); + textView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + jumpToSearch(st); + } + }); + fl_history_search.addView(textView); + } } else { ll_search_history.setVisibility(View.GONE); } @@ -379,8 +398,31 @@ .getJSONObject("Data").getJSONArray("data") .toString(), new TypeToken<List<String>>() { }.getType()); - gv_hot_search.setAdapter(new GridSuggestionAdapter( + if (hotSearchs == null || hotSearchs.size() == 0) { + gv_hot_search.setVisibility(View.GONE); + } else { + gv_hot_search.setVisibility(View.VISIBLE); + } + gv_hot_search.setAdapter(new HotSearchAdapter( hotSearchs, true)); + } else { + gv_hot_search.setVisibility(View.GONE); + } + } + }); + } + + private void getSearchRank() { + BeibeiVideoAPI.getSearchRank(this, + new BasicTextHttpResponseHandler() { + @Override + public void onSuccessPerfect(int statusCode, + Header[] headers, JSONObject jsonObject) + throws Exception { + if (jsonObject.getBoolean("IsPost")) { + JSONObject data = jsonObject + .getJSONObject("Data").getJSONObject("data"); + initSearchRank(data); } } }); @@ -393,7 +435,12 @@ // 1.鍔犺浇骞垮憡锛屽厛璁剧疆鍔犺浇涓婁笅鏂囩幆澧冨拰鏉′欢 private void initAdvertisement() { - AdUtil.AD_TYPE adType = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.videoSearch); + AdUtil.AD_TYPE adType1 = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.videoSearch); + if (adType1 == AdUtil.AD_TYPE.gdt) { + adType1 = AdUtil.AD_TYPE.gdt2; + } + final AdUtil.AD_TYPE adType = adType1; + fl_advertisement.post(new Runnable() { @Override public void run() { @@ -410,10 +457,10 @@ }); } else if (adType != null) { AdUtil.AD_TYPE newAdType = null; - if (adType == AdUtil.AD_TYPE.gdt) { + if (adType == AdUtil.AD_TYPE.gdt2) { newAdType = AdUtil.AD_TYPE.csj; } else - newAdType = AdUtil.AD_TYPE.gdt; + newAdType = AdUtil.AD_TYPE.gdt2; new ExpressAdManager(newAdType, getApplicationContext()).loadSearchAd(DimenUtils.px2dip(getApplicationContext(), width), new ExpressAdManager.IAdLoadListener() { @Override @@ -435,4 +482,128 @@ }); } + private void initSearchRank(JSONObject data) { + ll_search_rank.removeAllViews(); + Type type = new TypeToken<List<String>>() { + }.getType(); + Gson gson = new Gson(); + int count = 0; + for (Iterator<String> its = data.keys(); its.hasNext(); ) { + String key = its.next(); + JSONArray array = data.optJSONArray(key); + List<String> list = gson.fromJson(array.toString(), type); + String[] sts = new String[list.size()]; + int row = list.size() / 2; + for (int i = 0; i < list.size(); i++) { + if (i < row) { + sts[i * 2] = list.get(i); + } else { + sts[(i % row) * 2 + 1] = list.get(i); + } + + } + count++; + addSearchRankView(key, Arrays.asList(sts), ll_search_rank, count == data.length()); + } + } + + private void addSearchRankView(String title, List<String> contentList, LinearLayout container, boolean last) { + View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_search_rank, null); + MyGridView gv = view.findViewById(R.id.gv_content); + TextView tv_title = view.findViewById(R.id.tv_title); + tv_title.setText(title); + gv.setAdapter(new SearchRankAdapter(contentList, getApplicationContext())); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DimenUtils.dip2px(getApplicationContext(), 284), LinearLayout.LayoutParams.WRAP_CONTENT); + params.rightMargin = DimenUtils.dip2px(getApplicationContext(), !last ? 11 : 0); + container.addView(view, params); + } + + private void jumpToSearch(String key) { + Intent intent = new Intent(SearchActivity.this, + SearchResultActivity.class); + intent.putExtra("key", key); + startActivity(intent); + } + + + class SearchRankAdapter extends BaseAdapter { + + private List<String> mList; + private LayoutInflater layoutInflater; + + public SearchRankAdapter(List<String> list, Context context) { + this.mList = list; + layoutInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + return mList == null ? 0 : mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + if (convertView == null) { + viewHolder = new ViewHolder(); + convertView = LayoutInflater.from(parent.getContext()).inflate( + R.layout.item_search_rank_content, parent, false); + viewHolder.tv_rank = convertView + .findViewById(R.id.tv_rank); + viewHolder.tv_content = convertView + .findViewById(R.id.tv_content); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + if (position % 2 == 0) { + viewHolder.tv_rank.setText((position / 2 + 1) + ""); + } else { + viewHolder.tv_rank.setText((mList.size() / 2 + (position + 1) / 2) + ""); + } + viewHolder.tv_content.setText(mList.get(position)); + + String color = "#C2C2C2"; + switch (viewHolder.tv_rank.getText() + "") { + case "1": + color = "#FE3E3C"; + break; + case "2": + color = "#FE853C"; + break; + case "3": + color = "#FEC03C"; + break; + default: + color = "#C2C2C2"; + } + GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, + new int[]{Color.parseColor(color), Color.parseColor(color)}); + gd.setCornerRadius(DimenUtils.dip2px(convertView.getContext(), 4)); + viewHolder.tv_rank.setBackground(gd); + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + jumpToSearch(mList.get(position)); + } + }); + return convertView; + } + + class ViewHolder { + TextView tv_rank; + TextView tv_content; + } + } + } -- Gitblit v1.8.0