/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.fun.mapper.ui; import android.widget.ImageView; import com.taobao.luaview.fun.mapper.LuaViewLib; import com.taobao.luaview.userdata.constants.UDImageScaleType; import com.taobao.luaview.userdata.kit.UDData; import com.taobao.luaview.userdata.ui.UDImageView; import org.luaj.vm2.LuaFunction; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import java.util.List; /** * Image 接口封装 * * @param <U> * @author song */ @LuaViewLib(revisions = {"20170306已对标"}) public class UIImageViewMethodMapper<U extends UDImageView> extends UIViewMethodMapper<U> { private static final String TAG = "UIImageViewMethodMapper"; private static final String[] sMethods = new String[]{ "image",//0 "contentMode",//1 "scaleType",//2 "startAnimationImages",//3 "stopAnimationImages",//4 "isAnimationImages"//5 }; @Override public List<String> getAllFunctionNames() { return mergeFunctionNames(TAG, super.getAllFunctionNames(), sMethods); } @Override public Varargs invoke(int code, U target, Varargs varargs) { final int optcode = code - super.getAllFunctionNames().size(); switch (optcode) { case 0: return image(target, varargs); case 1: return contentMode(target, varargs); case 2: return scaleType(target, varargs); case 3: return startAnimationImages(target, varargs); case 4: return stopAnimationImages(target, varargs); case 5: return isAnimationImages(target, varargs); } return super.invoke(code, target, varargs); } //--------------------------------------- API -------------------------------------------------- /** * 设置图片url * * @param view UDImageView * @param varargs Varargs * @return LuaValue */ public LuaValue image(U view, Varargs varargs) { if (varargs.narg() > 1) { return setImage(view, varargs); } else { return getImage(view, varargs); } } public LuaValue setImage(U view, Varargs varargs) { if (varargs.isstring(2)) { final String url = varargs.optjstring(2, null); final LuaFunction callback = varargs.optfunction(3, null); return view.setImageUrl(url, callback); } else if (varargs.arg(2) instanceof UDData) {//data final UDData data = (UDData) varargs.arg(2); return view.setImageBitmap(data != null ? data.bytes() : null); } return view; } public LuaValue getImage(U view, Varargs varargs) { String imageUrl = view.getImageUrl(); return imageUrl != null ? valueOf(imageUrl) : LuaValue.NIL; } /** * 设置图片的缩放模式 * * @param view * @param varargs * @return */ @Deprecated public LuaValue contentMode(U view, Varargs varargs) { return scaleType(view, varargs); } public LuaValue setContentMode(U view, Varargs varargs) { return setScaleType(view, varargs); } public LuaValue getContentMode(U view, Varargs varargs) { return getScaleType(view, varargs); } /** * 设置图片的缩放模式 * TODO 跟iOS统一常 * * @param view * @param varargs * @return */ public LuaValue scaleType(U view, Varargs varargs) { if (varargs.narg() > 1) { return setScaleType(view, varargs); } else { return getScaleType(view, varargs); } } public LuaValue setScaleType(U view, Varargs varargs) { final String scaleTypeName = varargs.optjstring(2, ImageView.ScaleType.FIT_XY.name());//默认FIT_XY final ImageView.ScaleType scaleType = UDImageScaleType.parse(scaleTypeName); return view.setScaleType(scaleType); } public LuaValue getScaleType(U view, Varargs varargs) { return valueOf(view.getScaleType()); } /** * 开始帧动画 * * @param view * @param varargs 时间是秒而不是毫秒 * @return */ @Deprecated public LuaValue startAnimationImages(U view, Varargs varargs) { final LuaTable imagesTable = varargs.opttable(2, null); final double duration = varargs.optdouble(3, 1f); boolean repeat = false; if (varargs.isnumber(4)) { repeat = varargs.optint(4, -1) > 0; } else { repeat = varargs.optboolean(4, false); } if (imagesTable != null && imagesTable.length() > 0) { final String[] images = new String[imagesTable.length()]; int i = 0; for (LuaValue key : imagesTable.keys()) { images[i++] = imagesTable.get(key).optjstring(null); } return view.startAnimationImages(images, (int) duration * 1000, repeat); } return view; } /** * 停止帧动画 * * @param view * @param varargs * @return */ @Deprecated public LuaValue stopAnimationImages(U view, Varargs varargs) { return view.stopAnimationImages(); } /** * 是否在动画中 * * @param view * @param varargs * @return */ @Deprecated public LuaValue isAnimationImages(U view, Varargs varargs) { return valueOf(view.isAnimationImages()); } }