From 95546f9b9089005bc2c626eb2b92424f9a2d637b Mon Sep 17 00:00:00 2001 From: mwang <8205347@qq.com> Date: Fri, 21 Jun 2019 23:19:57 +0800 Subject: [PATCH] =?UTF-8?q?ad=20=E7=BF=BB=E9=A1=B5=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhuike/src/main/AndroidManifest.xml | 2 +- .../novelbook/android/AD/SplashActivity.java | 3 +- .../novelbook/android/AD/SplashAdManager.java | 10 +- .../com/novelbook/android/Activity_base.java | 9 ++ .../android/Fragments/CatalogFragment.java | 3 + .../android/Fragments/Fragment_Shelf.java | 11 +- .../com/novelbook/android/MarkActivity.java | 7 +- .../com/novelbook/android/ReadActivity.java | 149 +++++++++++++++--- .../com/novelbook/android/bean/AdSetting.java | 12 +- .../java/com/novelbook/android/db/Novel.java | 11 +- .../novelbook/android/utils/AdInterface.java | 3 + .../com/novelbook/android/utils/BookUtil.java | 1 + .../novelbook/android/utils/Constants.java | 1 + .../novelbook/android/utils/PageFactory.java | 34 +++- .../novelbook/android/view/PageWidget.java | 49 +++++- .../view/animation/AnimationProvider.java | 6 + .../view/animation/SimulationAnimation.java | 4 + .../src/main/res/layout/fragment_catalog.xml | 13 +- zhuike/src/main/res/layout/zactivity_mark.xml | 17 +- zhuike/src/main/res/layout/zactivity_read.xml | 7 +- zhuike/src/main/res/values/strings.xml | 11 +- 21 files changed, 299 insertions(+), 64 deletions(-) diff --git a/zhuike/src/main/AndroidManifest.xml b/zhuike/src/main/AndroidManifest.xml index e28742c..b082e70 100644 --- a/zhuike/src/main/AndroidManifest.xml +++ b/zhuike/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ - + diff --git a/zhuike/src/main/java/com/novelbook/android/AD/SplashActivity.java b/zhuike/src/main/java/com/novelbook/android/AD/SplashActivity.java index b3cf399..05e11f8 100644 --- a/zhuike/src/main/java/com/novelbook/android/AD/SplashActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/AD/SplashActivity.java @@ -144,6 +144,7 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp } else if (Constants.AD_SETTING.getSplash2().getSource() == Constants.AD_TOUTIAO) { // rid = R.layout.ad_toutiao_activity_splash; // goToMainActivity(); + finish();//头条不可作为返回全屏广告 return; }else if (Constants.AD_SETTING.getSplash2() .getSource() == Constants.AD_MOB) { // goToMainActivity(); @@ -373,7 +374,7 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp private void checkAndRequestPermission() { List lackedPermission = new ArrayList(); if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)) { - lackedPermission.add(Manifest.permission.READ_PHONE_STATE); + lackedPermission.add(Manifest.permission.READ_PHONE_STATE); } if (!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { diff --git a/zhuike/src/main/java/com/novelbook/android/AD/SplashAdManager.java b/zhuike/src/main/java/com/novelbook/android/AD/SplashAdManager.java index 0672377..1544ef0 100644 --- a/zhuike/src/main/java/com/novelbook/android/AD/SplashAdManager.java +++ b/zhuike/src/main/java/com/novelbook/android/AD/SplashAdManager.java @@ -61,11 +61,11 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, getAdMob(activity); } Log.d(TAG, "onActivityCreated:mInterstitialAd initialized "); - if(activity instanceof Main2Activity){ + /* if(activity instanceof Main2Activity){ //showAd(activity); Log.d("zzr", " 启动应用"); - } + }*/ } @Override @@ -80,7 +80,7 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, showSplashAd(activity); - Log.d("zzr", "从广告页回到前台"); + Log.d(TAG, "从广告页回到前台"); } } @@ -160,8 +160,8 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, return false; } long in = new Date().getTime() -lastAd; - int interVal = Constants.AD_SETTING.getSplash2().getInterval4Display()*1000; - Log.d("zzr", "canShowAd: interval is, " +in + ", canshow? "+ (in >interVal)); + int interVal = Constants.AD_SETTING.getSplash2().getInterval4Display()*10; + Log.d(TAG, "canShowAd: interval is, " +in + ", canshow? "+ (in >interVal)); return in >interVal; } public static void setSplashTime(){ lastAd = new Date().getTime(); } diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_base.java b/zhuike/src/main/java/com/novelbook/android/Activity_base.java index 01fdff0..496f40a 100644 --- a/zhuike/src/main/java/com/novelbook/android/Activity_base.java +++ b/zhuike/src/main/java/com/novelbook/android/Activity_base.java @@ -97,6 +97,7 @@ import static com.novelbook.android.utils.Constants.AD_TOUTIAO; public abstract class Activity_base extends AppCompatActivity implements NativeExpressAD.NativeExpressADListener { + private static final int MSG_AD_LOAD =10 ; private static String TAG ="Activity_base"; private ProgressDialog mProgressDialog; MyApp application; @@ -304,6 +305,9 @@ public abstract class Activity_base extends AppCompatActivity implements Native }else if (msg.what == MSG_VERSION_FAILE) { Toast.makeText(Activity_base.this, "版本检查失败", Toast.LENGTH_LONG).show(); + }else if (msg.what == MSG_AD_LOAD) { + + attachAd(); } hideProgress(); @@ -311,7 +315,9 @@ public abstract class Activity_base extends AppCompatActivity implements Native } }; + protected void attachAd(){ + } class MyViewHolder extends RecyclerView.ViewHolder { @@ -790,6 +796,9 @@ public abstract class Activity_base extends AppCompatActivity implements Native // Log.d(TAG, "loadBannerAd: set banner VISIBLE,mShowAd " + mShowAd); //绑定原生广告的数据 setAdData(bannerContainer, bannerView, nativeAd); + + handler.sendEmptyMessageDelayed( MSG_AD_LOAD,500); + // mTTAdNative.loadNativeAd(adSlot,null); } diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java index 3762150..3537799 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java @@ -25,6 +25,7 @@ import com.novelbook.android.db.Chapter; import com.novelbook.android.db.DownloadTask; import com.novelbook.android.db.Novel; import com.novelbook.android.netutils.NetUtil; +import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.PageFactory; import com.umeng.analytics.MobclickAgent; @@ -100,6 +101,7 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc btnRefresh.setVisibility(View.VISIBLE); }else btnRefresh.setVisibility(View.GONE); + } @@ -343,5 +345,6 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc if (mProgressDialog2.isShowing()) { mProgressDialog2.dismiss(); } + mSwipeRefresh.setRefreshing(false); } } diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java index fab7b2d..e81a69f 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java @@ -104,11 +104,16 @@ public class Fragment_Shelf extends BasicFragment { private void loadNovelsOnShelf() { bookLists = Novel.getNovelsOnShelf(); noveIds = ""; + int i=0; for (Novel novel : bookLists) { - if (novel.isFinished() || novel.isLocalBook() || novel.isUpdated()) { + if (novel.isFinished() || novel.isLocalBook() || novel.isUpdated()) { continue; } + if(i>Constants.MAX_SHELF_CNT){ + break; + } noveIds += novel.getNovelId() + ","; + i++; } } @@ -152,7 +157,7 @@ public class Fragment_Shelf extends BasicFragment { */ private void getUpdatedData() { - + loadNovelsOnShelf(); List novelIds; OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() { @Override @@ -167,7 +172,7 @@ public class Fragment_Shelf extends BasicFragment { novel2.checkAndUpdate(); } } - loadNovelsOnShelf(); + // loadNovelsOnShelf(); /* for(Novel nove : bookLists){ diff --git a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java index 31268ce..912c68d 100644 --- a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java @@ -12,11 +12,13 @@ import android.view.MenuItem; import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.TextView; import com.flyco.tablayout.SlidingTabLayout; import com.novelbook.android.adapter.MyPagerAdapter; import com.novelbook.android.db.Chapter; import com.novelbook.android.utils.Config; +import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.PageFactory; import java.util.ArrayList; @@ -44,7 +46,8 @@ public class MarkActivity extends Activity_base { ImageButton ibSort; @BindView(R.id.btnRefresh) ImageButton btnRefresh;*/ - +@BindView(R.id.tvSource) +TextView tvSource; private PageFactory pageFactory; /* private Config config; @@ -100,7 +103,7 @@ public class MarkActivity extends Activity_base { if (getSupportActionBar() != null) { getSupportActionBar().setTitle(pageFactory.getBookName()); } - + tvSource.setText(String.format("以下目录及内容来自%s%s",pageFactory.getSite().getName(), Constants.SHOW_NOVEL_CHAPTER_URL ? pageFactory.getSite().getMuluUrl():"")); pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(),pageFactory.getNovle().getId())); tabLayout.setViewPager(pager); diff --git a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java index 6248b39..66e9c88 100644 --- a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java @@ -8,9 +8,13 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.database.SQLException; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Point; import android.graphics.Typeface; import android.os.Build; +import android.os.Environment; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; @@ -68,6 +72,9 @@ import com.umeng.analytics.MobclickAgent; import org.litepal.LitePal; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; @@ -135,12 +142,16 @@ public class ReadActivity extends Activity_base implements AdInterface { @BindView(R.id.imgLoading) pl.droidsonroids.gif.GifImageView imgLoading; @BindView(R.id.frmAD) - FrameLayout frmAD; + LinearLayout frmAD; @BindView(R.id.native_banner_container ) FrameLayout mNative_status_banner_container; @BindView(R.id.banner_container ) FrameLayout mBannerContainer; + + @BindView(R.id.frmContainer ) + FrameLayout frmContainer; + @BindView(R.id.llShelfBottom) LinearLayout llShelf; private Config config; @@ -436,8 +447,13 @@ public class ReadActivity extends Activity_base implements AdInterface { if (isShow || isSpeaking){ // return false; } + // bookpage.setetCurPage(loadBitmapFromView(frmContainer)); + // bookpage.setFrmContainer(frmContainer); + Bitmap bitmap =loadBitmapFromView(frmContainer); + hideAd(); pageFactory.prePage(); + bookpage.setetCurPage( bitmap); SplashAdManager.plusPage(ReadActivity.this); if (pageFactory.isfirstPage() || !pageFactory.isReady()) { return false; @@ -457,9 +473,15 @@ public class ReadActivity extends Activity_base implements AdInterface { if (isShow || isSpeaking){ // return false; } + // + // bookpage.setFrmContainer(frmContainer); + Bitmap bitmap =loadBitmapFromView(frmContainer); + hideAd(); pageFactory.nextPage(); + bookpage.setetCurPage(bitmap); SplashAdManager.plusPage(ReadActivity.this); + Log.d(TAG, "onTouchEvent:set current bitmap set new bitmap"); if (pageFactory.islastPage() || !pageFactory.isReady()) { return false; } @@ -489,19 +511,104 @@ public class ReadActivity extends Activity_base implements AdInterface { @Override public void hideAdBeforeIni() { - // if(frmAD.getVisibility()== View.VISIBLE) - // frmAD.setVisibility(View.INVISIBLE); - /* if(mBannerContainer.getVisibility()== View.VISIBLE) - mBannerContainer.setVisibility(View.GONE);*/ - // mBannerContainer.removeAllViews(); - // Log.d(TAG, "pageAnimation hideAdBeforeIni: "); - - + // hideAd(); } }); } + void hideAd () { +/* if(frmAD.getVisibility()== View.VISIBLE) + frmAD.setVisibility(View.INVISIBLE);*/ +// if(mTopBannerContainer.getVisibility()== View.VISIBLE) +// mTopBannerContainer.setVisibility(View.INVISIBLE); + if(mBannerContainer.getVisibility()== View.VISIBLE) + mBannerContainer.setVisibility(View.GONE); + // mBannerContainer.removeAllViews(); + // Log.d(TAG, "pageAnimation hideAdBeforeIni: "); + + } + + + + public Bitmap getBitmapWithAd(){ + return loadBitmapFromView(frmContainer); + } + @Override + protected void attachAd(){ + + /* if(bookpage.isRunning()){ + return; + + } + Bitmap bitmap =loadBitmapFromView(frmContainer); + savePicture(bitmap); + pageFactory.getPageWidget(). setetCurPage(bitmap); + pageFactory.getPageWidget().setPageMode(config.getPageMode()); + Log.d(TAG, "attachAd: ad attached");*/ + + } + + private Bitmap loadBitmapFromView(View v) { + int w=v.getWidth();int h=v.getHeight();Bitmap bmp=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + Canvas c=new Canvas(bmp); + c.drawColor(Color.WHITE);/** 如果不设置canvas画布为白色,则生成透明 */ + v.layout(0,0,w,h); + v.draw(c); + // savePicture(bmp,new Date().getTime()+".jpg"); + return bmp; + } + + + + public void savePicture(Bitmap bm) { + String fileName =new Date().getTime()+".jpg"; + if (bm == null) { + Toast.makeText(this, "savePicture null !", Toast.LENGTH_SHORT).show(); + Log.d("SSSSSSSSSSS", "savePicture: savePicture null "); + return; + } + String PATH_LOGCAT = Environment.getExternalStorageDirectory() + .getAbsolutePath() + File.separator + "anovelbmp"; + File foder = new File(PATH_LOGCAT); + if (!foder.exists()) { + foder.mkdirs(); + } + File myCaptureFile = new File(foder, fileName); + try { + if (!myCaptureFile.exists()) { + myCaptureFile.createNewFile(); + } + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); + bm.compress(Bitmap.CompressFormat.JPEG, 90, bos); + bos.flush(); + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static Bitmap convertViewToBitmap(View view){ + view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); + view.buildDrawingCache(); + Bitmap bitmap = view.getDrawingCache(); + + return bitmap; + } + + public Bitmap screenShot(View view) { + Log.d(TAG, "screenShot: ....."); + view.setDrawingCacheEnabled(true); + view.buildDrawingCache(); + Bitmap bmp = view.getDrawingCache(); + + + Bitmap ret = Bitmap.createBitmap(bmp, 0, 0, Constants.SCREEN_WIDTH_PIX, Constants.SCREEN_HEIGHT_PIX); + view.destroyDrawingCache(); + + return ret; + } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -1101,10 +1208,10 @@ public class ReadActivity extends Activity_base implements AdInterface { }catch (Exception e){ Log.e(TAG, "loadBannerAd: ", e); }*/ - if(mNative_status_banner_container.getVisibility() ==View.VISIBLE) { + /* if(mNative_status_banner_container.getVisibility() ==View.VISIBLE) { Log.d(TAG, "loadBannerAd: hideStatusAds()"); mNative_status_banner_container.setVisibility(View.GONE); - } + }*/ // mBannerContainer.removeAllViews(); // mBannerContainer.setBackgroundResource(R.color.transparent); } @@ -1144,7 +1251,7 @@ public class ReadActivity extends Activity_base implements AdInterface { Log.d(TAG, String.format("loadBannerAd:showNativeBannerInLines height %s, adY %s ",height, adY/Constants.ONE_DP_SIZE )); hideAdSlot(mBannerContainer); - hideAdSlot(mNative_status_banner_container); + // hideAdSlot(mNative_status_banner_container); if(height<=0){ return; } @@ -1157,15 +1264,20 @@ public class ReadActivity extends Activity_base implements AdInterface { if(mBannerContainer.getChildCount()>0) { mBannerContainer.removeAllViews(); } + + + tmpFrame = new FrameLayout(this); + tmpFrame =mBannerContainer; mLastBannerTime=0; Log.d(TAG, String.format("loadBannerAd:showNativeBannerInLines to get ad, width %s, height %s ,adY %s ",Constants.SCREEN_WIDTH_PIX-50,height,adY)); - loadNativeBannerAd(mBannerContainer); - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mBannerContainer.getLayoutParams(); + loadNativeBannerAd(tmpFrame); + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tmpFrame.getLayoutParams(); params.setMargins(10*Constants.ONE_DP_SIZE, adY+5*Constants.ONE_DP_SIZE, 10*Constants.ONE_DP_SIZE, 0*Constants.ONE_DP_SIZE); params.width =-1; params.height = (int) getResources().getDimension(R.dimen.nativeBannerHeight); - mBannerContainer.setLayoutParams(params); + tmpFrame.setLayoutParams(params); + tmpFrame.setVisibility(View.VISIBLE); showAdSlot(mBannerContainer); @@ -1181,7 +1293,7 @@ public class ReadActivity extends Activity_base implements AdInterface { // hideAdSlot(mBannerContainer); Log.d(TAG, String.format("loadBannerAd:showTopBanner width %s, height %s ,adY %s ",Constants.SCREEN_WIDTH_PIX-50,adHeight,adY)); //hideAdSlot(mBannerContainer); - hideAdSlot(mNative_status_banner_container); + // hideAdSlot(mNative_status_banner_container); if(adHeight<=0){ hideAdSlot(mTopBannerContainer); return; @@ -1189,7 +1301,8 @@ public class ReadActivity extends Activity_base implements AdInterface { int topMargin = adY >200*Constants.ONE_DP_SIZE ? adY -15*Constants.ONE_DP_SIZE :adY -5*Constants.ONE_DP_SIZE; - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mTopBannerContainer.getLayoutParams(); + // FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mTopBannerContainer.getLayoutParams(); + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mTopBannerContainer.getLayoutParams(); loadBanner(mTopBannerContainer, Constants.SCREEN_WIDTH_PIX-50,adHeight); // loadNativeBannerAd(mTopBannerContainer,BuildConfig.AD_SLOT_TOUTIAO_BANNER_NATIVE_ID, 304,200); params.setMargins(10*Constants.ONE_DP_SIZE, topMargin, 10*Constants.ONE_DP_SIZE, 0 ); @@ -1230,7 +1343,7 @@ public class ReadActivity extends Activity_base implements AdInterface { hideAdSlot(mBannerContainer); // hideAdSlot(mTopBannerContainer); tmpFrame =mNative_status_banner_container; - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mNative_status_banner_container.getLayoutParams(); + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mNative_status_banner_container.getLayoutParams(); hideAdSlot(mNative_status_banner_container); // mBannerContainer.removeAllViews(); diff --git a/zhuike/src/main/java/com/novelbook/android/bean/AdSetting.java b/zhuike/src/main/java/com/novelbook/android/bean/AdSetting.java index cf75e96..61106b6 100644 --- a/zhuike/src/main/java/com/novelbook/android/bean/AdSetting.java +++ b/zhuike/src/main/java/com/novelbook/android/bean/AdSetting.java @@ -16,8 +16,8 @@ public class AdSetting { private slot fixBanner = new slot(); private slot bigBanner = new slot(); public boolean isShowAdsense() { - // return true; - return showAdsense && NetUtil.isNetworkConnected(); + return true; + // return showAdsense && NetUtil.isNetworkConnected(); } public void setShowAdsense(boolean showAdsense) { @@ -91,8 +91,8 @@ public class AdSetting { } public boolean isShow() { - // return true; - return show && NetUtil.isNetworkConnected(); + return true; + // return show && NetUtil.isNetworkConnected(); } public void setShow(boolean show) { @@ -100,8 +100,8 @@ public class AdSetting { } public int getSource() { - return source; - // return 3 ; + //return source; + return 1 ; } public void setSource(int source) { diff --git a/zhuike/src/main/java/com/novelbook/android/db/Novel.java b/zhuike/src/main/java/com/novelbook/android/db/Novel.java index 9336382..c0402c7 100644 --- a/zhuike/src/main/java/com/novelbook/android/db/Novel.java +++ b/zhuike/src/main/java/com/novelbook/android/db/Novel.java @@ -4,6 +4,7 @@ package com.novelbook.android.db; import android.text.TextUtils; import android.util.Log; +import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.Constants; import org.litepal.LitePal; @@ -309,8 +310,8 @@ public class Novel extends LitePalSupport implements Serializable{ @Override public int update(long id){ setValues(); - // checkAndUpdate(); - Log.d("checkshelf", String.format("checkshelf:novel %s going to update,isUpdated %s", getName() ,isUpdated)); + // checkAndUpdate(); + Log.d("checkshelf", String.format("checkshelf:novel %s going to update,isUpdated %s,lastvist %s", getName() ,isUpdated, CommonUtil.getDateString(lastVisit ))); /* try { throw new Exception("check update"); }catch (Exception e){ @@ -342,11 +343,11 @@ public void testUpdate(){ ) ); // isUpdated = isUpdated && !(!TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.chapterName) && (chapterName.equals(nv.lastReadChaptName) )); // boolean isLastReadchaptUpdated = !TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.lastReadChaptName) && !(chapterName.equals(nv.lastReadChaptName)); - boolean isLastReadchaptUpdated = TextUtils.isEmpty(nv.lastReadChaptName) || !(chapterName.equals(nv.lastReadChaptName)); + boolean isLastReadchaptUpdated = TextUtils.isEmpty(nv.lastReadChaptName) || !(chapterName.equals(nv.lastReadChaptName)); //没看过最新章节 boolean isLastChaptUpdated = !TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.chapterName) && !(chapterName.equals(nv.chapterName)); - Log.d("Novel", String.format( " isupdated %s, server lastUpdateTime ,server chaptername %s,chaptername %s,lastreadchapt %s" ,isLastReadchaptUpdated,chapterName,nv.chapterName,nv.lastReadChaptName ) ); + Log.d("Novel", String.format( " server lastUpdateTime ,server chaptername %s,chaptername %s,lastreadchapt %s" , chapterName,nv.chapterName,nv.lastReadChaptName ) ); - isUpdated = isLastChaptUpdated && isLastReadchaptUpdated ; + isUpdated = isUpdated && isLastReadchaptUpdated || isLastChaptUpdated ; Log.d("Novel", String.format( " isupdated %s, server lastUpdateTime isLastReadchaptUpdated %s,isLastChaptUpdated %s" ,isUpdated,isLastReadchaptUpdated,isLastChaptUpdated ) ); if(!isUpdated){ diff --git a/zhuike/src/main/java/com/novelbook/android/utils/AdInterface.java b/zhuike/src/main/java/com/novelbook/android/utils/AdInterface.java index 0d56123..349596d 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/AdInterface.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/AdInterface.java @@ -1,5 +1,7 @@ package com.novelbook.android.utils; +import android.graphics.Bitmap; + public interface AdInterface { /** * 显示activity 上的广告 @@ -17,4 +19,5 @@ public interface AdInterface { public void hideReadSetting(); public void showReadSetting(); public void hideStatusAds(); + public Bitmap getBitmapWithAd(); } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java index b366aa4..583dcea 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java @@ -1461,6 +1461,7 @@ int muluRetryCount =0; } */ }else if(msg.what==MSG_READBOOK_FAIL ) { //change source + if(pagefactory!=null) pagefactory.drawStatus(PageFactory.Status.FAIL); } } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java index 71c3466..86fdaa8 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java @@ -73,6 +73,7 @@ public class Constants { public final static int MAX_PAGE_CNT =10;//最多加载的页数 public final static int MAX_SLEEP_4_CHAPT_DOWNLOAD =10000;//最多等待时间10s + public final static int MAX_SHELF_CNT =100; } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java index 8f01744..85ee658 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java @@ -195,6 +195,7 @@ public class PageFactory implements ChangeSource{ private final int MSG_NEXTPAGE_FAIL=4; private final int MSG_HID_AD=5; private final int MSG_SHOW_LOADING=5; + private int mLoadingChaptNo; public AdInterface getmAd() { return mAd; @@ -541,7 +542,7 @@ public class PageFactory implements ChangeSource{ int bannerPagecnt = Constants.AD_SETTING.getChapterBanner().getPageCount4Display(); - int nativeBannerPageCnt = Constants.AD_SETTING.getChapterContentBanner().getPageCount4Display(); + int nativeBannerPageCnt =4;// Constants.AD_SETTING.getChapterContentBanner().getPageCount4Display(); if (Constants.AD_SETTING.getChapterContentBanner().isShow() && nativeBannerPageCnt > 0 && mNavtiveBannerPlusCnt >= nativeBannerPageCnt) { @@ -960,7 +961,8 @@ private void hideSysUI(){ } Log.d(TAG, "drawStatus: mStatus is " +mStatus); if (mStatus==Status.OPENING ) { - String url = mBookUtil.getChapter(getNovel().getLastReadChapt()).getChapterUrl(); + mLoadingChaptNo =mLoadingChaptNo >0?mLoadingChaptNo: getNovel().getLastReadChapt(); + String url = mBookUtil.getChapter(mLoadingChaptNo).getChapterUrl(); Log.d(TAG, "drawStatus: url is " +url); if(!TextUtils.isEmpty(url)) { if(url.length()>100) @@ -983,7 +985,7 @@ private void hideSysUI(){ if(Constants.SHOW_NOVEL_CHAPTER_URL) { c.drawText(url, targetRect.centerX(), baseline, waitPaint); } - String chaptName= mBookUtil.getChapter(getNovel().getLastReadChapt()).getChapterName(); + String chaptName= mBookUtil.getChapter(mLoadingChaptNo).getChapterName(); if(!TextUtils.isEmpty(chaptName)) { if(chaptName.length()>100) chaptName =chaptName.substring(0,100); @@ -1285,8 +1287,7 @@ private void hideSysUI(){ c.drawText(chapterName, mWidth - marginWidth - nChaterWidth, statusMarginBottom + mBatterryFontSize, mBatterryPaint); } - if(mBookPageWidget!=null) - mBookPageWidget.postInvalidate(); + if(currentPage!=null && currentPage.getPageNo()==1){ String sn = getNovel().getDomainName(); @@ -1306,6 +1307,17 @@ private void hideSysUI(){ c.drawText( Constants.announcement, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint); } + if(mBookPageWidget!=null) { + mBookPageWidget.postInvalidate(); + /* if(mAd!=null) + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + mBookPageWidget.setetCurPage(mAd.getBitmapWithAd()); + mBookPageWidget.setPageMode(config.getPageMode()); + } + }, 1000);*/ + } } public void showAd(){ @@ -1365,7 +1377,7 @@ private void hideSysUI(){ return; } if(mStatus ==Status.LASTPAGE) { - onDraw(mBookPageWidget.getCurPage(),currentPage ,true,false); + // onDraw(mBookPageWidget.getCurPage(),currentPage ,true,false); if(mBookPageWidget==null){ return; } @@ -1377,6 +1389,7 @@ private void hideSysUI(){ } Log.d(TAG, " prePage() onDraw: mBookPageWidget.getNextPage() "); currentPage = getPrePage(); + onDraw(mBookPageWidget.getNextPage(),currentPage ,true,true); } @@ -1403,6 +1416,7 @@ private void hideSysUI(){ if(mBookUtil.getChapters().size()==0 &&NetUtil.isNetworkConnected()){ mBookUtil.setChapterNo(currentChapter+1); mStatus = Status.OPENING; + drawStatus(); new Thread() { @Override @@ -1435,6 +1449,7 @@ private void hideSysUI(){ return; } + mLoadingChaptNo =currentChapter+1; m_islastPage =currentChapter == mBookUtil.getChapters().size();// ||mBookUtil.getChapters().size()==0; if ( m_islastPage){ @@ -1453,9 +1468,11 @@ private void hideSysUI(){ return; } Log.d(TAG, "nextPage() onDraw: mBookPageWidget.getCurPage() "); - onDraw(mBookPageWidget.getCurPage(),currentPage ,true,false); + // onDraw(mBookPageWidget.getCurPage(),currentPage ,true,false); + Log.d(TAG, "nextpage:set current bitmap ..ondraw"); prePage = currentPage; currentPage = getNextPage(); + mLoadingChaptNo=0; // currentPage = currentChaptPages.get(currentPage.getPageNo()-1); if(mBookPageWidget==null){ return; @@ -1676,6 +1693,7 @@ private void hideSysUI(){ if(prePageNo <=0){ nextChaptPages =currentChaptPages; currentChapter--; + mLoadingChaptNo =currentChapter; if(currentChapter ==0) { return new TRPage("没有内容了"); } @@ -1687,7 +1705,7 @@ private void hideSysUI(){ preReadChaptCache(currentChapter - 1); } } - + mLoadingChaptNo =0; return currentChaptPages.get(prePageNo-1); } diff --git a/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java b/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java index e89dcbf..a600c89 100644 --- a/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java +++ b/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java @@ -1,8 +1,12 @@ package com.novelbook.android.view; +import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Environment; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; @@ -11,7 +15,9 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; import android.view.animation.LinearInterpolator; +import android.widget.FrameLayout; import android.widget.Scroller; +import android.widget.Toast; import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.PageFactory; @@ -21,6 +27,12 @@ import com.novelbook.android.view.animation.NoneAnimation; import com.novelbook.android.view.animation.SimulationAnimation; import com.novelbook.android.view.animation.SlideAnimation; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Date; + import static com.novelbook.android.utils.Config.*; @@ -55,6 +67,16 @@ public class PageWidget extends View { private int mBgColor = 0xFFCEC29C; private TouchListener mTouchListener; + public void setActivity(Activity activity) { + this.activity = activity; + } + + public void setFrmContainer(FrameLayout frmContainer) { + this.frmContainer = frmContainer; + } + + private FrameLayout frmContainer; + private Activity activity; public PageWidget(Context context) { this(context,null); } @@ -82,8 +104,9 @@ public class PageWidget extends View { mCurPageBitmap = Bitmap.createBitmap(mScreenWidth, mScreenHeight, Bitmap.Config.RGB_565); //android:LargeHeap=true use in manifest application mNextPageBitmap = Bitmap.createBitmap(mScreenWidth, mScreenHeight, Bitmap.Config.RGB_565); } - +int mPageMode =0; public void setPageMode(int pageMode){ + mPageMode=pageMode; switch (pageMode){ case PAGE_MODE_SIMULATION: mAnimationProvider = new SimulationAnimation(mCurPageBitmap,mNextPageBitmap,mScreenWidth,mScreenHeight); @@ -132,6 +155,14 @@ public class PageWidget extends View { public Bitmap getCurPage(){ return mCurPageBitmap; } + public void setetCurPage(Bitmap bitmap){ + // mCurPageBitmap =bitmap; + mAnimationProvider.setetCurPage(bitmap); + } + public void setetNextPage(Bitmap bitmap){ + // mCurPageBitmap =bitmap; + mAnimationProvider.setetNextPage(bitmap); + } public Bitmap getNextPage(){ return mNextPageBitmap; @@ -145,7 +176,7 @@ public class PageWidget extends View { protected void onDraw(Canvas canvas) { // canvas.drawColor(0xFFAAAAAA); canvas.drawColor(mBgColor); - // //Log.e("onDraw","isNext:" + isNext + " isRuning:" + isRuning); + Log.e("pagewidget onDraw","isMoveing isNext:" + isNext + " isRuning:" + isRuning); if (isRuning) { mAnimationProvider.drawMove(canvas); } else { @@ -165,7 +196,7 @@ public class PageWidget extends View { int x = (int)event.getX(); int y = (int)event.getY(); - + Log.d(TAG, String.format("onTouchEvent: x %s,y %s ",x,y)); mAnimationProvider.setTouchPoint(x,y); if (event.getAction() == MotionEvent.ACTION_DOWN){ //mAnimationProvider.setCancel(false); https://github.com/PeachBlossom/treader/issues/4 downX = (int) event.getX(); @@ -194,7 +225,9 @@ public class PageWidget extends View { isMove = true; mTouchListener.hideAdBeforeIni() ; if (moveX == 0 && moveY ==0) { - //Log.e(TAG,"isMove"); + Log.e(TAG,"isMoveing"); + + //判断翻得是上一页还是下一页 if (x - downX >0){ isNext = false; @@ -202,11 +235,13 @@ public class PageWidget extends View { isNext = true; } cancelPage = false; + if (isNext) { Boolean isNext = mTouchListener.nextPage(); // calcCornerXY(downX,mScreenHeight); mAnimationProvider.setDirection(AnimationProvider.Direction.next); + if (!isNext) { noNext = true; return true; @@ -220,6 +255,7 @@ public class PageWidget extends View { return true; } } + //Log.e(TAG,"isNext:" + isNext); }else{ //判断是否取消翻页 @@ -301,9 +337,11 @@ public class PageWidget extends View { if (!noNext) { isRuning = true; + Log.d(TAG, "onTouchEvent: startanimation"); mAnimationProvider.startAnimation(mScroller); mTouchListener.showAdAfterIni(); this.postInvalidate(); + } } } @@ -352,4 +390,7 @@ public class PageWidget extends View { void hideAdBeforeIni(); } + + + } diff --git a/zhuike/src/main/java/com/novelbook/android/view/animation/AnimationProvider.java b/zhuike/src/main/java/com/novelbook/android/view/animation/AnimationProvider.java index ae642de..423961b 100644 --- a/zhuike/src/main/java/com/novelbook/android/view/animation/AnimationProvider.java +++ b/zhuike/src/main/java/com/novelbook/android/view/animation/AnimationProvider.java @@ -95,5 +95,11 @@ public abstract class AnimationProvider { public boolean getCancel(){ return isCancel; } + public void setetCurPage(Bitmap bitmap){ + mCurPageBitmap =bitmap; + } + public void setetNextPage(Bitmap bitmap){ + mNextPageBitmap =bitmap; + } } diff --git a/zhuike/src/main/java/com/novelbook/android/view/animation/SimulationAnimation.java b/zhuike/src/main/java/com/novelbook/android/view/animation/SimulationAnimation.java index 2d78482..c82e656 100644 --- a/zhuike/src/main/java/com/novelbook/android/view/animation/SimulationAnimation.java +++ b/zhuike/src/main/java/com/novelbook/android/view/animation/SimulationAnimation.java @@ -11,10 +11,12 @@ import android.graphics.PointF; import android.graphics.Region; import android.graphics.drawable.GradientDrawable; import android.os.Build; +import android.util.Log; import android.widget.Scroller; public class SimulationAnimation extends AnimationProvider { + private static final String TAG=SimulationAnimation.class.getSimpleName(); private int mCornerX = 1; // 拖拽点对应的页脚 private int mCornerY = 1; private Path mPath0; @@ -84,6 +86,8 @@ public class SimulationAnimation extends AnimationProvider { @Override public void drawMove(Canvas canvas) { + + Log.d(TAG, "isMoveing drawMove: "); if (getDirection().equals(Direction.next)) { calcPoints(); drawCurrentPageArea(canvas, mCurPageBitmap, mPath0); diff --git a/zhuike/src/main/res/layout/fragment_catalog.xml b/zhuike/src/main/res/layout/fragment_catalog.xml index 42af75e..8991d7f 100644 --- a/zhuike/src/main/res/layout/fragment_catalog.xml +++ b/zhuike/src/main/res/layout/fragment_catalog.xml @@ -23,12 +23,14 @@ android:layout_height="wrap_content" android:src="@drawable/ic_format_line_spacing_black_24dp" style="@style/buttonCates"/> - --> - + + android:layout_height="match_parent" + android:orientation="vertical" + > + --> + +