Search in sources :

Example 1 with AsyncPageLoader

use of com.tmall.wireless.tangram.support.async.AsyncPageLoader in project Tangram-Android by alibaba.

the class TangramActivity method onCreate.

@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
    try {
        Picasso.setSingletonInstance(new Picasso.Builder(this).loggingEnabled(true).build());
    } catch (Exception e) {
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    recyclerView = (RecyclerView) findViewById(R.id.main_view);
    // Step 1: init tangram
    TangramBuilder.init(this, new IInnerImageSetter() {

        @Override
        public <IMAGE extends ImageView> void doLoadImageUrl(@NonNull IMAGE view, @Nullable String url) {
            Picasso.with(TangramActivity.this).load(url).into(view);
        }
    }, ImageView.class);
    // Tangram.switchLog(true);
    mMainHandler = new Handler(getMainLooper());
    // Step 2: register build=in cells and cards
    builder = TangramBuilder.newInnerBuilder(this);
    // Step 3: register business cells and cards
    builder.registerCell(1, TestView.class);
    builder.registerCell(10, SimpleImgView.class);
    builder.registerCell(2, SimpleImgView.class);
    builder.registerCell(4, RatioTextView.class);
    builder.registerCell(110, TestViewHolderCell.class, new ViewHolderCreator<>(R.layout.item_holder, TestViewHolder.class, TextView.class));
    builder.registerCell(199, SingleImageView.class);
    builder.registerVirtualView("vvtest");
    // Step 4: new engine
    engine = builder.build();
    engine.setVirtualViewTemplate(VVTEST.BIN);
    engine.getService(VafContext.class).setImageLoaderAdapter(new IImageLoaderAdapter() {

        private List<ImageTarget> cache = new ArrayList<ImageTarget>();

        @Override
        public void bindImage(String uri, final ImageBase imageBase, int reqWidth, int reqHeight) {
            RequestCreator requestCreator = Picasso.with(TangramActivity.this).load(uri);
            Log.d("TangramActivity", "bindImage request width height " + reqHeight + " " + reqWidth);
            if (reqHeight > 0 || reqWidth > 0) {
                requestCreator.resize(reqWidth, reqHeight);
            }
            ImageTarget imageTarget = new ImageTarget(imageBase);
            cache.add(imageTarget);
            requestCreator.into(imageTarget);
        }

        @Override
        public void getBitmap(String uri, int reqWidth, int reqHeight, final Listener lis) {
            RequestCreator requestCreator = Picasso.with(TangramActivity.this).load(uri);
            Log.d("TangramActivity", "getBitmap request width height " + reqHeight + " " + reqWidth);
            if (reqHeight > 0 || reqWidth > 0) {
                requestCreator.resize(reqWidth, reqHeight);
            }
            ImageTarget imageTarget = new ImageTarget(lis);
            cache.add(imageTarget);
            requestCreator.into(imageTarget);
        }
    });
    Utils.setUedScreenWidth(720);
    // Step 5: add card load support if you have card that loading cells async
    engine.addCardLoadSupport(new CardLoadSupport(new AsyncLoader() {

        @Override
        public void loadData(Card card, @NonNull final LoadedCallback callback) {
            Log.w("Load Card", card.load);
            mMainHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // do loading
                    JSONArray cells = new JSONArray();
                    for (int i = 0; i < 10; i++) {
                        try {
                            JSONObject obj = new JSONObject();
                            obj.put("type", 1);
                            obj.put("msg", "async loaded");
                            JSONObject style = new JSONObject();
                            style.put("bgColor", "#FF1111");
                            obj.put("style", style.toString());
                            cells.put(obj);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    // callback.fail(false);
                    callback.finish(engine.parseComponent(cells));
                }
            }, 200);
        }
    }, new AsyncPageLoader() {

        @Override
        public void loadData(final int page, @NonNull final Card card, @NonNull final LoadedCallback callback) {
            mMainHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    Log.w("Load page", card.load + " page " + page);
                    JSONArray cells = new JSONArray();
                    for (int i = 0; i < 9; i++) {
                        try {
                            JSONObject obj = new JSONObject();
                            obj.put("type", 1);
                            obj.put("msg", "async page loaded, params: " + card.getParams().toString());
                            cells.put(obj);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    List<BaseCell> cs = engine.parseComponent(cells);
                    if (card.page == 1) {
                        GroupBasicAdapter<Card, ?> adapter = engine.getGroupBasicAdapter();
                        card.setCells(cs);
                        adapter.refreshWithoutNotify();
                        Range<Integer> range = adapter.getCardRange(card);
                        adapter.notifyItemRemoved(range.getLower());
                        adapter.notifyItemRangeInserted(range.getLower(), cs.size());
                    } else
                        card.addCells(cs);
                    // mock load 6 pages
                    callback.finish(card.page != 6);
                    card.notifyDataChange();
                }
            }, 400);
        }
    }));
    engine.addSimpleClickSupport(new SampleClickSupport());
    // Step 6: enable auto load more if your page's data is lazy loaded
    engine.enableAutoLoadMore(true);
    // Step 7: bind recyclerView to engine
    engine.bindView(recyclerView);
    // Step 8: listener recyclerView onScroll event to trigger auto load more
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            engine.onScrolled();
        }
    });
    // Step 9: set an offset to fix card
    engine.getLayoutManager().setFixOffset(0, 40, 0, 0);
    // Step 10: get tangram data and pass it to engine
    String json = new String(getAssertsFile(this, "data.json"));
    JSONArray data = null;
    try {
        data = new JSONArray(json);
        engine.setData(data);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    findViewById(R.id.first).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            engine.refresh(true);
        }
    });
}
Also used : Listener(com.tmall.wireless.vaf.virtualview.Helper.ImageLoader.Listener) CardLoadSupport(com.tmall.wireless.tangram.support.async.CardLoadSupport) IInnerImageSetter(com.tmall.wireless.tangram.util.IInnerImageSetter) ArrayList(java.util.ArrayList) RequestCreator(com.squareup.picasso.RequestCreator) SampleClickSupport(com.tmall.wireless.tangram.example.support.SampleClickSupport) NonNull(android.support.annotation.NonNull) TextView(android.widget.TextView) RatioTextView(com.tmall.wireless.tangram.example.data.RatioTextView) List(java.util.List) ArrayList(java.util.ArrayList) GroupBasicAdapter(com.tmall.wireless.tangram.core.adapter.GroupBasicAdapter) AsyncLoader(com.tmall.wireless.tangram.support.async.AsyncLoader) TestViewHolder(com.tmall.wireless.tangram.example.data.TestViewHolder) JSONArray(org.json.JSONArray) Handler(android.os.Handler) JSONException(org.json.JSONException) AsyncPageLoader(com.tmall.wireless.tangram.support.async.AsyncPageLoader) Range(com.alibaba.android.vlayout.Range) ImageView(android.widget.ImageView) SimpleImgView(com.tmall.wireless.tangram.example.data.SimpleImgView) SingleImageView(com.tmall.wireless.tangram.example.data.SingleImageView) View(android.view.View) TestView(com.tmall.wireless.tangram.example.data.TestView) TextView(android.widget.TextView) RecyclerView(android.support.v7.widget.RecyclerView) RatioTextView(com.tmall.wireless.tangram.example.data.RatioTextView) JSONException(org.json.JSONException) IOException(java.io.IOException) Card(com.tmall.wireless.tangram.dataparser.concrete.Card) JSONObject(org.json.JSONObject) VafContext(com.tmall.wireless.vaf.framework.VafContext) IImageLoaderAdapter(com.tmall.wireless.vaf.virtualview.Helper.ImageLoader.IImageLoaderAdapter) Picasso(com.squareup.picasso.Picasso) RecyclerView(android.support.v7.widget.RecyclerView) ImageBase(com.tmall.wireless.vaf.virtualview.view.image.ImageBase) TargetApi(android.annotation.TargetApi)

Example 2 with AsyncPageLoader

use of com.tmall.wireless.tangram.support.async.AsyncPageLoader in project Tangram-Android by alibaba.

the class TangramDataParserActivity method onCreate.

@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
    try {
        Picasso.setSingletonInstance(new Picasso.Builder(this).loggingEnabled(true).build());
    } catch (Exception e) {
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    recyclerView = (RecyclerView) findViewById(R.id.main_view);
    // Step 1: init tangram
    TangramBuilder.init(this, new IInnerImageSetter() {

        @Override
        public <IMAGE extends ImageView> void doLoadImageUrl(@NonNull IMAGE view, @Nullable String url) {
            Picasso.with(TangramDataParserActivity.this).load(url).into(view);
        }
    }, ImageView.class);
    // Tangram.switchLog(true);
    mMainHandler = new Handler(getMainLooper());
    // Step 2: register build=in cells and cards
    builder = TangramBuilder.newInnerBuilder(this);
    // add: custom dataParser
    builder.setDataParser(new SampleDataParser());
    // Step 3: register business cells and cards
    builder.registerCard(1000, BannerCard.class);
    builder.registerCard(2000, FourColumnCard.class);
    builder.registerCell(1, TestView.class);
    builder.registerCell(10, SimpleImgView.class);
    builder.registerCell(2, SimpleImgView.class);
    builder.registerCell(4, RatioTextView.class);
    builder.registerCell(110, TestViewHolderCell.class, new ViewHolderCreator<>(R.layout.item_holder, TestViewHolder.class, TextView.class));
    builder.registerCell(199, SingleImageView.class);
    builder.registerVirtualView("vvtest");
    // Step 4: new engine
    engine = builder.build();
    engine.setVirtualViewTemplate(VVTEST.BIN);
    Utils.setUedScreenWidth(720);
    // Step 5: add card load support if you have card that loading cells async
    engine.addCardLoadSupport(new CardLoadSupport(new AsyncLoader() {

        @Override
        public void loadData(Card card, @NonNull final LoadedCallback callback) {
            Log.w("Load Card", card.load);
            mMainHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // do loading
                    JSONArray cells = new JSONArray();
                    for (int i = 0; i < 10; i++) {
                        try {
                            JSONObject obj = new JSONObject();
                            obj.put("type", 1);
                            obj.put("msg", "async loaded");
                            JSONObject style = new JSONObject();
                            style.put("bgColor", "#FF1111");
                            obj.put("style", style.toString());
                            cells.put(obj);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    // callback.fail(false);
                    callback.finish(engine.parseComponent(cells));
                }
            }, 200);
        }
    }, new AsyncPageLoader() {

        @Override
        public void loadData(final int page, @NonNull final Card card, @NonNull final LoadedCallback callback) {
            mMainHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    Log.w("Load page", card.load + " page " + page);
                    JSONArray cells = new JSONArray();
                    for (int i = 0; i < 9; i++) {
                        try {
                            JSONObject obj = new JSONObject();
                            obj.put("type", 1);
                            obj.put("msg", "async page loaded, params: " + card.getParams().toString());
                            cells.put(obj);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    List<BaseCell> cs = engine.parseComponent(cells);
                    if (card.page == 1) {
                        GroupBasicAdapter<Card, ?> adapter = engine.getGroupBasicAdapter();
                        card.setCells(cs);
                        adapter.refreshWithoutNotify();
                        Range<Integer> range = adapter.getCardRange(card);
                        adapter.notifyItemRemoved(range.getLower());
                        adapter.notifyItemRangeInserted(range.getLower(), cs.size());
                    } else
                        card.addCells(cs);
                    // mock load 6 pages
                    callback.finish(card.page != 6);
                    card.notifyDataChange();
                }
            }, 400);
        }
    }));
    engine.addSimpleClickSupport(new SampleClickSupport());
    // Step 6: enable auto load more if your page's data is lazy loaded
    engine.enableAutoLoadMore(true);
    // Step 7: bind recyclerView to engine
    engine.bindView(recyclerView);
    // Step 8: listener recyclerView onScroll event to trigger auto load more
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            engine.onScrolled();
        }
    });
    // Step 9: set an offset to fix card
    engine.getLayoutManager().setFixOffset(0, 40, 0, 0);
    // Step 10: get tangram data and pass it to engine
    String json = new String(getAssertsFile(this, "data_third.json"));
    JSONArray data = null;
    try {
        data = new JSONArray(json);
        engine.setData(data);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    findViewById(R.id.first).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            engine.refresh(true);
        }
    });
}
Also used : CardLoadSupport(com.tmall.wireless.tangram.support.async.CardLoadSupport) IInnerImageSetter(com.tmall.wireless.tangram.util.IInnerImageSetter) SampleClickSupport(com.tmall.wireless.tangram.example.support.SampleClickSupport) NonNull(android.support.annotation.NonNull) TextView(android.widget.TextView) RatioTextView(com.tmall.wireless.tangram.example.data.RatioTextView) List(java.util.List) GroupBasicAdapter(com.tmall.wireless.tangram.core.adapter.GroupBasicAdapter) AsyncLoader(com.tmall.wireless.tangram.support.async.AsyncLoader) TestViewHolder(com.tmall.wireless.tangram.example.data.TestViewHolder) JSONArray(org.json.JSONArray) Handler(android.os.Handler) JSONException(org.json.JSONException) AsyncPageLoader(com.tmall.wireless.tangram.support.async.AsyncPageLoader) Range(com.alibaba.android.vlayout.Range) ImageView(android.widget.ImageView) SimpleImgView(com.tmall.wireless.tangram.example.data.SimpleImgView) SingleImageView(com.tmall.wireless.tangram.example.data.SingleImageView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) TestView(com.tmall.wireless.tangram.example.data.TestView) TextView(android.widget.TextView) RatioTextView(com.tmall.wireless.tangram.example.data.RatioTextView) JSONException(org.json.JSONException) IOException(java.io.IOException) BannerCard(com.tmall.wireless.tangram.structure.card.BannerCard) FourColumnCard(com.tmall.wireless.tangram.structure.card.FourColumnCard) Card(com.tmall.wireless.tangram.dataparser.concrete.Card) SampleDataParser(com.tmall.wireless.tangram.example.dataparser.SampleDataParser) JSONObject(org.json.JSONObject) Picasso(com.squareup.picasso.Picasso) RecyclerView(android.support.v7.widget.RecyclerView) TargetApi(android.annotation.TargetApi)

Aggregations

TargetApi (android.annotation.TargetApi)2 Handler (android.os.Handler)2 NonNull (android.support.annotation.NonNull)2 RecyclerView (android.support.v7.widget.RecyclerView)2 View (android.view.View)2 ImageView (android.widget.ImageView)2 TextView (android.widget.TextView)2 Range (com.alibaba.android.vlayout.Range)2 Picasso (com.squareup.picasso.Picasso)2 GroupBasicAdapter (com.tmall.wireless.tangram.core.adapter.GroupBasicAdapter)2 Card (com.tmall.wireless.tangram.dataparser.concrete.Card)2 RatioTextView (com.tmall.wireless.tangram.example.data.RatioTextView)2 SimpleImgView (com.tmall.wireless.tangram.example.data.SimpleImgView)2 SingleImageView (com.tmall.wireless.tangram.example.data.SingleImageView)2 TestView (com.tmall.wireless.tangram.example.data.TestView)2 TestViewHolder (com.tmall.wireless.tangram.example.data.TestViewHolder)2 SampleClickSupport (com.tmall.wireless.tangram.example.support.SampleClickSupport)2 AsyncLoader (com.tmall.wireless.tangram.support.async.AsyncLoader)2 AsyncPageLoader (com.tmall.wireless.tangram.support.async.AsyncPageLoader)2 CardLoadSupport (com.tmall.wireless.tangram.support.async.CardLoadSupport)2