使用高德JS API绘制多轨迹调用pathSimplifierIns.setdata出现两条连接在一起的情况,如何解决 20C

毕业设计相关,使用高德JS API绘制多轨迹,但是出现了第一条轨迹和第二条轨迹相连的情况。非常的不解,图片说明

后端使用的是flask,数据为从mysql里读取,在后端已经将其处理为了JSON.

@app.route("/getmultitrack/<code>",methods=["GET"])
def getmultitrack(code):
    print(code)
    db = pymysql.connect(host="localhost",
                         port=29260,
                         user="root",
                         passwd="admin",
                         db="grad")

    cursor = db.cursor()
    res = []
    flag = 1
    datas = []
    while flag <= int(code):
        sql = "select lontitude,latitude from track where track_id=%s order by time_stamp ASC"

        cursor.execute(sql, [flag])


        i = 0
        while i < cursor.rowcount:
            res.append(cursor.fetchone())
            i = i + 1

        tmp = []

        for v in res:
            l = []
            l.append(round(float(str(v[0])), 6))
            l.append(round(float(str(v[1])), 6))
            # l.append(v[0])
            # l.append(v[1])
            tmp.append(l)

        data = {"name": str(flag), "path": tmp} #将其转为能被setdata读入的格式
        datas.append(data)
        flag = flag + 1

    print(code)
    print("diaoyoongmulti")
    return jsonify(datas)

前端使用AJAX进行接收

    <script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
    <script type="text/javascript">
    //创建地图
    var map = new AMap.Map("container", {
        resizeEnable: true,
        center: [108.93297,34.27802],
        zoom: 20
    });

        AMapUI.load(['ui/misc/PathSimplifier'], function(PathSimplifier) {

if (!PathSimplifier.supportCanvas) {
    alert('当前环境不支持 Canvas!');
    return;
}

//启动页面
initPage(PathSimplifier);
});

function initPage(PathSimplifier) {
//创建组件实例
    var pathSimplifierIns = new PathSimplifier({
        zIndex: 100,
        map: map, //所属的地图实例
        getPath: function(pathData, pathIndex) {
        //返回轨迹数据中的节点坐标信息,[AMap.LngLat, AMap.LngLat...] 或者 [[lng|number,lat|number],...]
        return pathData.path;
         },
        getHoverTitle: function(pathData, pathIndex, pointIndex) {
        //返回鼠标悬停时显示的信息
        if (pointIndex >= 0) {
            //鼠标悬停在某个轨迹节点上
            return pathData.name + ',点:' + pointIndex + '/' + pathData.path.length;
        }
        //鼠标悬停在节点之间的连线上
        return pathData.name + ',点数量' + pathData.path.length;
    },
    renderOptions: {
        //轨迹线的样式
        pathLineStyle: {
            strokeStyle: 'red',
            lineWidth: 6,
            dirArrowStyle: true
            }
        }
    });

            code=2;
            var myArr = [];


            function init()
            {

                $.ajax({
                    url: "/getmultitrack/" + code,
                    type: "GET",
                    dataType: "json",
                    success: function (data) {
                    pathSimplifierIns.setData(data);
                    }
                })

            };
            $(document).ready(function(){
            init();
        }); 
        };
    </script>

点均可成功画出,单条轨迹也可完全无误的画出。就是两条轨迹间会有第一条轨迹的尾端和第二条轨迹头部相连的情况。
在高德的网上找了demo中的数据

pathSimplifierIns.setData([{
        name: '轨迹0',
        path: [
            [100.340417, 27.376994],
            [108.426354, 37.827452],
            [113.392174, 31.208439],
            [124.905846, 42.232876]
        ]
    }, {
        name: '大地线',
        //创建一条包括500个插值点的大地线
        path: PathSimplifier.getGeodesicPath([116.405289, 39.904987], [87.61792, 43.793308], 500)
    }]);

直接放进本人代码中调用的pathSimplifierIns.setdata可以不连接的进行显示,我但是我的数据就会导致连接。

1个回答

syw19970227
syw19970227 看过这篇博客但是没有成功,我的代码就是仿照他写的
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
双向一对多配置错误,可以帮忙看看吗

> package cn.itcast.F_Many2Many; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; public class App1 { private static SessionFactory sf; static{ sf = new Configuration() .configure() .addClass(Project.class) .addClass(Developer.class) .buildSessionFactory(); } @Test public void save(){ Session session = sf.openSession(); Project pro_ds = new Project(); pro_ds.setP_name("电商"); Project pro_oa = new Project(); pro_oa.setP_name("OA系统"); Developer dev_zs = new Developer(); dev_zs.setD_name("张三"); Developer dev_ls = new Developer(); dev_ls.setD_name("李四"); Developer dev_ww = new Developer(); dev_ww.setD_name("王五"); Developer dev_ml = new Developer(); dev_ml.setD_name("马六"); pro_ds.getDeve().add(dev_zs);//电商 张三 李四 王五 pro_ds.getDeve().add(dev_ls); pro_ds.getDeve().add(dev_ww); pro_oa.getDeve().add(dev_ls); // oa 李四王五 马六 pro_oa.getDeve().add(dev_ww); pro_oa.getDeve().add(dev_ml); session.save(pro_ds); session.save(pro_oa); session.beginTransaction().commit(); session.close(); } } ``` package cn.itcast.F_Many2Many; import java.util.HashSet; import java.util.Set; public class Project { private int p_id; private String p_name; //一个项目多个人员 private Set<Developer> deve = new HashSet<Developer>(); public int getP_id() { return p_id; } public void setP_id(int p_id) { this.p_id = p_id; } public String getP_name() { return p_name; } public void setP_name(String p_name) { this.p_name = p_name; } public Set<Developer> getDeve() { return deve; } public void setDeve(Set<Developer> deve) { this.deve = deve; } } ``` package cn.itcast.F_Many2Many; import java.util.HashSet; import java.util.Set; public class Developer { private int d_id; private String d_name; //一个人员属于多个项目 private Set<Project> pro = new HashSet<Project>(); public int getD_id() { return d_id; } public void setD_id(int d_id) { this.d_id = d_id; } public String getD_name() { return d_name; } public void setD_name(String d_name) { this.d_name = d_name; } public Set<Project> getPro() { return pro; } public void setPro(Set<Project> pro) { this.pro = pro; } } ``` <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.itcast.F_Many2Many.Developer" table="F_Developer"> <id name="d_id"> <generator class="native"/> </id> <property name="d_name" length="10"/> <set name="pro" table="F_Project" > <key column="p_id"></key> <one-to-many class="cn.itcast.F_Many2Many.Project" /> </set> </class> </hibernate-mapping> ``` <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.itcast.F_Many2Many.Project" table="F_Project"> <id name="p_id" > <generator class="native"></generator> </id> <property name="p_name"></property> <set name="deve" table="F_Developer" cascade="save-update,delete" inverse="true"> <key column="p_id"></key> <one-to-many class="cn.itcast.F_Many2Many.Developer"/> </set> </class> </hibernate-mapping>

向listview中添加新数据,可是每次添加都会把旧的数据覆盖,我看了好多例子还是没看懂

这是我更新listview的代码 Handler handler = new Handler(){ List<Map<String, Object>> listItemx = new ArrayList<Map<String, Object>>(); public void handleMessage(android.os.Message msg) { if (msg.arg1 == 0X456) { listItemx = (List<Map<String, Object>>) msg.obj; SimpleAdapter simpleAdapter = new SimpleAdapter(getActivity(), listItemx, R.layout.weather_simple_item, new String[]{"city", "lowtemp", "hightemp", "week", "curTemp", "type", "fengli", "aqi"}, new int[]{R.id.city, R.id.lowtemp, R.id.hightemp, R.id.week, R.id.curTemp, R.id.type, R.id.fengli, R.id.aqi}); ListView list = (ListView) getView().findViewById(R.id.chat_weathers); // 为ListView设置Adapter list.setAdapter(simpleAdapter); simpleAdapter.notifyDataSetChanged(); } } }; 求大神啊

var func = func || (function(){ .....}());求答

<pre name="code" class="js">var jagg = jagg || (function () { var ctx = context; var modules = {}; var requirs = {}; var templates = {}; var initializers = {}; var bloks = {}; var data; var setData = function (d) { data = d; }; var getData = function () { return data; }; var getUser = function () { return session.get("logged.user"); }; var setUser = function (user) { session.put("logged.user", user); }; var getThemeFile = function (path) { var p, index, theme = getUserTheme(); if(theme.subtheme) { p = getThemePath() + "subthemes/" + theme.subtheme + "/" + path; index = p.indexOf("?"); if(new File(p.substring(0, index == -1 ? p.length : index)).isExists()) { return p; } } return getThemePath() + path; }; var getThemesPath = function () { return "/site/themes/"; }; var getThemePath = function () { return getThemesPath() + getUserTheme().base + "/"; }; var getBlockFile = function (name) { return getBlocksDir() + name + "/block.jag"; }; var getInitializerFile = function (name) { return getThemeFile("templates/" + name + "/initializer.jag"); }; var getTemplateFile = function (name) { return getThemeFile("templates/" + name + "/template.jag"); }; var getTemplatePath = function(themeDir, name) { return themeDir + "templates/" + name + "/template.jag"; }; var getModuleFile = function (name) { return getModulesDir() + name + "/module.jag"; }; var getBlocksDir = function () { return "/site/blocks/"; }; var getThemesDir = function () { return "/site/themes/"; }; var getModulesDir = function () { return "/modules/"; }; var getTheme = function () { var site = require("/site/conf/site.json"), theme = request.getParameter("theme"), subtheme = request.getParameter("subtheme"); return { base : theme ? theme : site.theme.base, subtheme : subtheme ? subtheme : site.theme.subtheme }; }; var getUserTheme = function () { return session.get("theme") ? session.get("theme") : getTheme(); }; var mergeParams = function (extInputs, defInputs) { var key, obj; extInputs = extInputs || {}; for (key in defInputs) { if (defInputs.hasOwnProperty(key)) { obj = extInputs[key]; if (!obj) { extInputs[key] = defInputs[key]; } } } return extInputs; }; var renderBlock = function (name, inputs, outputs, populate) { //initializeTemplate({name:name, params:null}, jagg); var init, fn, blok, log = new Log(); fn = template(name); if (!fn) { log.error("Template header and footer includes are missing for : " + name); } if (populate) { blok = block(name); if (!inputs) { inputs = blok.getInputs ? blok.getInputs() : {}; } else { mergeParams(inputs, blok.getInputs ? blok.getInputs() : null); } if (blok.getOutputs) { outputs = blok.getOutputs(inputs); } else if (blok.getInputs) { outputs = inputs; } else { outputs = {}; } } init = initializer(name); if (init.postInitialize) { init.postInitialize(inputs, outputs); } fn(inputs, outputs, jagg); }; var inheritParent = function (blok, name) { var parent = require(getBlockFile(name)); for (var prop in parent) { if (parent.hasOwnProperty(prop)) { if (!blok[prop]) { blok[prop] = parent[prop]; } } } }; var initializeBlock = function (obj) { if (!obj) { return; } var extInputs, defInputs, parent, tmpl, inputBlocks, outputBlocks, outputs, tmplInitializer, bloks, i, length, name = obj.name, blok = block(name), log = new Log(); template(name); extInputs = obj.inputs || (obj.inputs = {}); defInputs = blok.getInputs ? blok.getInputs() : {}; mergeParams(extInputs, defInputs); if (blok.getInputBlocks) { inputBlocks = blok.getInputBlocks(); length = inputBlocks.length; for (i = 0; i &lt; length; i++) { initializeBlocks(inputBlocks[i], extInputs); } } if (blok.getOutputs) { outputs = blok.getOutputs(extInputs); } else if (blok.getInputs) { outputs = extInputs; } else { outputs = {}; } obj.outputs = outputs; if (blok.getOutputBlocks) { outputBlocks = blok.getOutputBlocks(); length = outputBlocks.length; for (i = 0; i &lt; length; i++) { initializeBlocks(outputBlocks[i], outputs); } } if (blok.getStaticBlocks) { bloks = blok.getStaticBlocks(); length = bloks.length; for (i = 0; i &lt; length; i++) { initializeBlock({name:bloks[i], inputs:null}); } } }; // [ "foo", "bar", "mar"] // [{ "name" : "foo/bar", params : {}}] var initializeBlocks = function (keys, inputs) { if (!inputs) { return; } var i, length, values, last; if (typeof keys !== "string") { length = keys.length; values = inputs[keys[0]]; last = (length == 1); if (values instanceof Array) { length = values.length; for (i = 0; i &lt; length; i++) { if (last) { initializeBlock(values[i]); } else { initializeBlocks(keys.slice(1), values[i]); } } } else { if (last) { initializeBlock(values); } else { initializeBlocks(keys.slice(1), values); } } return; } else { values = inputs[keys]; } if (values instanceof Array) { length = values.length; for (i = 0; i &lt; length; i++) { initializeBlock(values[i]); } } else { initializeBlock(values); } }; var insertData = function (jagg, template, parent, name, key, value) { var keys, values, data = getData(); data = data[parent] || (data[parent] = {}); data = data[name] || (data[name] = {}); data = data[template] || (data[template] = {}); keys = data.keys || (data.keys = []); values = data.values || (data.values = {}); keys.push(key); values[key] = value; }; var printData = function (tmpls) { var key, tmpl, keys, values, i, length; for (key in tmpls) { if (tmpls.hasOwnProperty(key)) { tmpl = tmpls[key]; keys = tmpl.keys; values = tmpl.values; length = keys.length; for (i = 0; i &lt; length; i++) { print(values[keys[i]]); } } } }; var getUrlMapping = function (path) { var urlMap = ctx.get("url.map"), url, configs, i, length, mapping, mappings, file; if (urlMap) { url = urlMap[path]; return url ? url : path; } file = new File("/jaggery.conf"); file.open("r"); configs = parse(file.readAll()); file.close(); urlMap = {}; mappings = configs.urlMappings; length = mappings.length; for (i = 0; i &lt; length; i++) { mapping = mappings[i]; urlMap[mapping.path] = mapping.url; } ctx.put("url.map", urlMap); url = urlMap[path]; return url ? url : path; }; var getMappedUrl = function (path) { return getAbsoluteUrl(getUrlMapping(path)); }; var getAbsoluteUrl = function (path) { return site.context + path; }; var module = function (name, module) { if (module) { return modules[name] = module; } module = modules[name]; if (module) { return module; } include(getModuleFile(name)); return modules[name]; }; var requir = function (path) { var obj = requirs[path]; return obj ? obj : requirs[path] = require(path); }; var block = function (name, blok) { var parent; if (blok) { return bloks[name] = blok; } blok = bloks[name]; if (blok) { return blok; } //we need to include and initialize include(getBlockFile(name)); blok = bloks[name]; parent = blok.getParent; if (parent) { parent = parent(); inheritParent(blok, parent); } if (blok.initialize) { //TODO which to pass into initialize method blok.initialize(getData()); } return bloks[name]; }; var template = function (name, tmpl) { var blok, parent, init; if (tmpl) { return templates[name] = tmpl; } tmpl = templates[name]; if (tmpl) { return tmpl; } blok = block(name); parent = blok.getParent; if (parent) { name = parent(); } tmpl = templates[name]; if (tmpl) { return tmpl; } include(getTemplateFile(name)); init = initializer(name); if (init.preInitialize) { init.preInitialize(); } return templates[name]; }; var initializer = function (name, init) { var blok, parent; if (init) { return initializers[name] = init; } init = initializers[name]; if (init) { return init; } blok = block(name); parent = blok.getParent; if (parent) { name = parent(); } init = initializers[name]; if (init) { return init; } include(getInitializerFile(name)); return initializers[name]; }; var render = function (obj) { var init, fn, inputs, outputs, name = obj.name, log = new Log(), blok; setData(obj); initializeBlock(obj); include(getTemplateFile(name)); fn = template(name); if (!fn) { log.error("Template header and footer includes are missing for : " + name); } inputs = obj.inputs; blok = block(name); if (blok.getOutputs) { outputs = blok.getOutputs(inputs); } else if (blok.getInputs) { outputs = inputs; } else { outputs = {}; } init = initializer(name); if (init.postInitialize) { init.postInitialize(inputs, outputs); } fn(inputs, outputs, jagg); }; var includeBlock = function (name, inputs) { renderBlock(name, inputs, null, true); }; var includeBlocks = function (bloks) { if (!bloks) { return; } var i, d, length; if (bloks instanceof Array) { length = bloks.length; for (i = 0; i &lt; length; i++) { d = bloks[i]; renderBlock(d.name, d.inputs, d.outputs, false); } } else { renderBlock(bloks.name, bloks.inputs, bloks.outputs, false); } }; var addHeaderCSS = function (template, key, css) { css = '&lt;link type="text/css" rel="stylesheet" href="' + site.context + getThemeFile(css) + '"/&gt;'; insertData(this, template, "header", "css", key, css); }; var addHeaderCSSCode = function (template, key, css) { css = '&lt;style type="text/css"&gt;' + css + '&lt;/style&gt;'; insertData(this, template, "header", "css", key, css); }; var addHeaderJS = function (template, key, js) { js = '&lt;script type="text/javascript" src="' + site.context + getThemeFile(js) + '"&gt;&lt;/script&gt;'; insertData(this, template, "header", "js", key, js); }; var addHeaderJSCode = function (template, key, js) { js = '&lt;script type="text/javascript"&gt;' + js + '&lt;/script&gt;'; insertData(this, template, "header", "js", key, js); }; var addHeaderCode = function (template, key, code) { insertData(this, template, "header", "code", key, code); }; var addFooterCSS = function (template, key, css) { css = '&lt;link type="text/css" rel="stylesheet" href="' + site.context + getThemeFile(css) + '"/&gt;'; insertData(this, template, "footer", "css", key, css); }; var addFooterCSSCode = function (template, key, css) { css = '&lt;style type="text/css"&gt;' + css + '&lt;/style&gt;'; insertData(this, template, "footer", "css", key, css); }; var addFooterJS = function (template, key, js) { js = '&lt;script type="text/javascript" src="' + site.context + getThemeFile(js) + '"&gt;&lt;/script&gt;'; insertData(this, template, "footer", "js", key, js); }; var addFooterJSCode = function (template, key, js) { js = '&lt;script type="text/javascript"&gt;' + js + '&lt;/script&gt;'; insertData(this, template, "footer", "js", key, js); }; var addFooterCode = function (template, key, code) { insertData(this, template, "footer", "code", key, code); }; var includeJag = function (path) { include(getThemeFile(path)); }; return { setUser:setUser, getUser:getUser, block:block, module:module, initializer:initializer, includeBlock:includeBlock, includeBlocks:includeBlocks, render:render, template:template, require:requir, getAbsoluteUrl:getAbsoluteUrl, getMappedUrl:getMappedUrl, printData:printData, getModulesDir:getModulesDir, data:getData, addHeaderCSS:addHeaderCSS, addHeaderCSSCode:addHeaderCSSCode, addHeaderJS:addHeaderJS, addHeaderJSCode:addHeaderJSCode, addHeaderCode:addHeaderCode, addFooterCSS:addFooterCSS, addFooterCSSCode:addFooterCSSCode, addFooterJS:addFooterJS, addFooterJSCode:addFooterJSCode, addFooterCode:addFooterCode, includeJag:includeJag, getUserTheme:getUserTheme, getThemeFile:getThemeFile }; }());</pre>   <p>这个表达式是什么意思??我就没看懂这高人想干什么?特别是中间的这个 || ,变量本身和一个function取||是什么意思??</p> <p> </p>

JSP,MVC查询外键所在表中的其他内容并放入list中在前台页面显示数据

VO中的字段 Emp private String id; private String e_id; private String e_head; private String e_name; private String e_sex; private Dep d_id; private String e_tell; private String e_address; Dep private String d_id; private String d_name; DAO中的代码 public List<中的代码Emp> queryAllEmp() { List<Emp> emps = new ArrayList<Emp>(); Connection conn = null; Statement st = null; ResultSet rs = null; String sql = "select id,e_id,e_head,e_name,e_sex,dep.d_name,e_tell,e_address from emp,dep" + "where emp.d_id=dep.d_id"; try { conn = DBConnection.getInstance().getConnection(); st = conn.createStatement(); rs = st.executeQuery(sql); while (rs.next()) { Emp emp = new Emp(); emp.setId(rs.getString("id")); emp.setE_id(rs.getString("e_id")); emp.setE_head(rs.getString("e_head")); emp.setE_name(rs.getString("e_name")); emp.setE_sex(rs.getString("e_sex")); emp.setD_id(rs.getString("d_id")); emp.setE_tell(rs.getString("e_tell")); emp.setE_address(rs.getString("e_address")); emps.add(emp); } } catch (Exception e) { e.printStackTrace(); } finally{ DBConnection.getInstance().close(rs, st, conn); } return emps; } 想查出emp里面的字段和外键d_id对应的d_name 求指教怎么改,应该是什么样的一个思路

小弟有个androi动画的问题,困扰我太久了,求大神解惑

我自定义了一个View,在鼠标点击处画一个小球,利用ObjectAnimator和PropertyValuesHolder设置动画效果,为什么设置x,y属性动画正常,小球能沿着坐标轴一定,设置 alpha和scale就不起作用,这玩意是怎么知道我写的X,Y就是让他在坐标轴上移动,但是他为什么不认识alpha和scale,还是我写的有问题,代码如下 package com.example.mrwuchao.newballtest; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RadialGradient; import android.graphics.Shader; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.widget.Button; import android.widget.RelativeLayout; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private float BALL_SIZE = 50f; ArrayList<ShapeHolder> arrayList = new ArrayList<>(); // Button button; /*出现问题 * 自定义的View可以使用想x,y属性让小球移动,但是使用alpha或者scale就没有效果 * objectAnimator是怎么识别这些属性的,写出一个字符串,他是怎么判断要执行什么动画的?*/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout re = (RelativeLayout)findViewById(R.id.re); re.addView(new MyView(this)); // button = (Button)findViewById(R.id.button); } public class MyView extends View implements ValueAnimator.AnimatorUpdateListener { public MyView(Context context) { super(context); setBackgroundColor(Color.WHITE); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() != MotionEvent.ACTION_DOWN && event.getAction() != MotionEvent.ACTION_MOVE) { return false; } ShapeHolder newBall = addBall(event.getX(), event.getY()); PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("x",event.getX(),600f,200f); PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("alpha",1.0f,0f); ObjectAnimator oa = ObjectAnimator.ofPropertyValuesHolder(newBall,p1,p2); oa.setDuration(2000); // oa.setInterpolator(new AccelerateInterpolator()); oa.addUpdateListener(this); oa.start(); // ObjectAnimator oa = ObjectAnimator.ofFloat(newBall,"x",600f); // ObjectAnimator ob = ObjectAnimator.ofFloat(newBall,"y",600f); // // ob.addUpdateListener(this); // // AnimatorSet animatorSet = new AnimatorSet(); // animatorSet.play(oa).with(ob); // animatorSet.setDuration(2000); // animatorSet.start(); return true; } private ShapeHolder addBall(float x, float y) { OvalShape circle = new OvalShape(); circle.resize(BALL_SIZE, BALL_SIZE); ShapeDrawable drawable = new ShapeDrawable(circle); ShapeHolder shapeHolder = new ShapeHolder(drawable); shapeHolder.setX(x-BALL_SIZE/2); shapeHolder.setY(y-BALL_SIZE/2); shapeHolder.setAlpha(1.0f); Paint paint = drawable.getPaint(); int[] color = new int[]{Color.GRAY, Color.BLUE}; RadialGradient gradient = new RadialGradient(40f, 15f, BALL_SIZE, color, null, Shader.TileMode.CLAMP); paint.setShader(gradient); //paint.setColor(Color.RED); shapeHolder.setPaint(paint); arrayList.add(shapeHolder); return shapeHolder; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (ShapeHolder sh : arrayList) { canvas.save(); canvas.translate(sh.getX(),sh.getY()); sh.getD().draw(canvas); canvas.restore(); } } @Override public void onAnimationUpdate(ValueAnimator animation) { this.invalidate(); } } } 包装类 package com.example.mrwuchao.newballtest; import android.graphics.Paint; import android.graphics.drawable.ShapeDrawable; /** * Created by Mr.wuchao on 2016/6/8. */ public class ShapeHolder { public void setDrawable(ShapeDrawable drawable) { this.d = drawable; } ShapeDrawable d; Paint paint; float alpha = 1.0f; float x,y; public ShapeHolder(ShapeDrawable drawable) { this.d = drawable; } public ShapeDrawable getD() { return d; } public void setD(ShapeDrawable d) { this.d = d; } public float getAlpha() { return alpha; } public void setAlpha(float alpha) { this.alpha = alpha; } public float getX() { return x; } public void setX(float x) { this.x = x; } public Paint getPaint() { return paint; } public void setPaint(Paint paint) { this.paint = paint; } public float getY() { return y; } public void setY(float y) { this.y = y; } }

为什么LCD只亮不显示?

![图片说明](https://img-ask.csdn.net/upload/201907/09/1562660378_758305.png) 代码如下 #include "system.h" #include <stdio.h> #define key4 (P1IN&BIT0) #define key3 (P1IN&BIT1) #define key2 (P1IN&BIT2) #define key1 (P1IN&BIT3) #define OPEN_Buzzer (P1OUT|=BIT4) #define CLOSE_Buzzer (P1OUT&=~BIT4) unsigned int setU=35; //上限 unsigned int setD=25; //下限 unsigned char SetFlag = 0;//设置标志 unsigned int tem; //暂存温度值 float NowTemp=0; //实际测试纸 unsigned char ReadTempFlag=0;//读取温度标志 char dis0[16];//显示暂存 char dis1[16];//显示暂存 unsigned char DisLcd=0; //显示更新 void disPlayLcd(void); void CheckKey(void);//按键采集处理函数 void main( void ) { IO_init(); // Uart0_init(9600); TimerA(); //初始化定时器 TimerB(); // Init_WDT(); _EINT(); P1DIR |= (BIT4); //初始化输出 P1DIR &= ~(BIT0|BIT1|BIT2|BIT3);//初始化输入 OPEN_Buzzer; //开启蜂鸣器 LcdReset(); //LCD1602初始化 delay_ms(100); CLOSE_Buzzer;//关断蜂鸣器 while(1) { CheckKey();//读取按键 并进行修改 if(ReadTempFlag==1)//读取温度标志 { ReadTempFlag=0; tem=ReadTemp(); //读取温度 } if(DisLcd==1) //更新显示 { DisLcd=0; NowTemp=(float)tem*0.0625;//计算温度 根据手册来 sprintf(dis0,"NowTemp: %4.1f ",NowTemp);//更新显示 DispStr(0,0,(unsigned char *)dis0);//打印显示 Disp1Char(13,0,0xdf);//显示符号 Disp1Char(14,0,'C'); disPlayLcd();// 显示设置第二行数据 if((NowTemp<setD)||(NowTemp>setU))//对比上下限 { OPEN_Buzzer; //开启蜂鸣器 } else { CLOSE_Buzzer;//关断蜂鸣器 } // LPM2; //进入低功耗 定时器中断中退出中断 } } } void disPlayLcd(void) { if(SetFlag == 0)//按键设置标志 { sprintf(dis1," %02d- %02d ",(int)setD,(int)setU); //更新显示标志 } else if(SetFlag == 1)//按键设置标志0 { sprintf(dis1,"s%02d- %02d ",(int)setD,(int)setU);//更新显示标志 } else if(SetFlag == 2)//按键设置标志 { sprintf(dis1," %02d-s%02d ",(int)setD,(int)setU);//更新显示标志 } DispStr(3,1,(uchar *)dis1);//显示 } void CheckKey(void)//按键采集处理函数 { static unsigned char rekey =0; if((key1==0)||(key2==0)||(key3==0)||(key4==0)) //检测到按键按下 { delay_ms(10); //小抖动 if(rekey==0) { if(key1==0) //检测是否按下 { rekey=1; SetFlag++;//设置标志 if(SetFlag >= 3) SetFlag = 0; } else if(key2==0)//设置值键 { rekey=1; if(SetFlag==1) //处于设置1 { if(setD > 0 )//数据-1 {setD=setD-1;} } else if(SetFlag==2)//处于设置2 { if(setU > 0)//数据-1 {setU=setU-1;} } } else if(key3==0)//设置值键 { rekey=1; if(SetFlag==1) //处于设置1 { if(setD < 99 )//数据+1 {setD=setD+1;} } else if(SetFlag==2)//处于设置2 { if(setU < 99 )//数据+1 {setU=setU+1;} } } else if(key4==0)//设置值键 { rekey=1; SetFlag = 0;//取消设置 } } } else { rekey=0; //防止重复检测到按键 } }

编程创建一个Rectangle类,在类中:定义两个私有变量length和width表示长、宽;定义一个方法setDemo(...)对长和宽进行初始化,当长或者宽<0时,......

编程创建一个Rectangle类,在类中: (1)定义两个私有变量length和width表示长、宽; (2)定义一个方法setDemo(...)对长和宽进行初始化,当长或者宽<0时,给出错误提示; (3)定义一个方法area()求面积; 创建主类Test,要求在主类主方法中,创建Rectangle类的对象,求给定尺寸的长方形的面积(假设长、宽分别从键盘输入)

汇编语言setl指令疑问

setl指令是访问条件码用的。以下括号中为我的理解或疑惑 setl,即set when less,测试一个有符号比较。(指令:setl D效果是D<-SF^OF 也就是 将符号标志位和溢出标志位异或的结果给D寄存器) 当a和b是用二进制补码表示时,对于a<b,计算两者只差时,会有a-b<0(就是说 符号标志会被设置为0)。当a-b是一个很大的正数时,出现正溢出,会得到t<0(t是等于 a-b的,为什么这里得到t<0,正溢出是怎么个情况。。我理解的正溢出是两个负数相加得到一个正数,所以正溢出。)。当a-b是一个 很小的负数,出现负溢出,得到t>0.无论是这两种情况中的哪一种, 符号标志都表示的是真正的差的反(这句有点疑惑了。。不知所云)? 这一段总的表达是说不管你正溢出,负溢出,CF^OF都能代表a小于b时的情况( 符号位为0,表示为正,否则为负;溢出位1表示溢出,0为非溢出。 )。 求解答 什么是正溢出?刚上面的解释部分的部分疑惑。。。

PHP将数组转换为字符串

<div class="post-text" itemprop="text"> <p>This my array:</p> <pre><code>$info = array( "setA" =&gt; array ( "start" =&gt; 0, "end" =&gt; 0 ), "setB" =&gt; array ( "start" =&gt; 100, "end" =&gt; 300 ), "setC" =&gt; array ( "start" =&gt; 0, "end" =&gt; 0 ), "setD" =&gt; array ( "start" =&gt; 500, "end" =&gt; 1000 ), "setE" =&gt; array ( "start" =&gt; 0, "end" =&gt; 0 ), "setF" =&gt; array ( "start" =&gt; 0, "end" =&gt; 0 ), "setG" =&gt; array ( "start" =&gt; 0, "end" =&gt; 0 ) ); </code></pre> <p>How can I convert this so an echo command produces:</p> <pre><code>setA 0 - 0 setB 100 - 300 setC 0 - 0 setD 500 - 1000 setE 0 - 0 setF 0 - 0 setG 0 - 0 </code></pre> <p>I've tried various things including the following, but nothing comes close.</p> <pre><code>array_walk_recursive($info, function($v) use (&amp;$result) { $result[] = $v; }); echo implode('&lt;br&gt;', $result); </code></pre> <p>Any ideas ? Thanks</p> </div>

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

01、Java入门(Getting Started);02、集成开发环境(IDE);03、项目结构(Eclipse JavaProject);04、类和对象(Classes and Objects);05:词法结构(Lexical Structure);06:数据类型和变量(Data Type and Variables);07:运算符(Operators);08:控制流程语句(Control Flow Statements);

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

立即提问
相关内容推荐