6.9学习内容 设置相机参数,android古怪的bug,仿微信可点击的点赞文字

29 篇文章 0 订阅

上一篇文章中,说相机设置参数无效是错误的,内疚ing。。。。


正确的设置方法是这样的:

  parameters = camera.getParameters(); // 获取各项参数
                parameters.setPictureFormat(PixelFormat.JPEG); // 设置图片格式
                parameters.setPreviewFrameRate(5);  //设置每秒显示4帧
                // 设置预浏尺寸,注意要在摄像头支持的范围内选择
                Camera.Size size = getMaxSize(parameters);
                parameters.setPreviewSize(size.height,size.width);
//                parameters.setPictureSize();
//                parameters.setPictureSize(1280,720);
//                parameters.setPictureSize(500, 100); // 设置保存的图片尺寸
                parameters.setJpegQuality(80); // 设置照片质量

                parameters.setRotation(90);
                camera.setParameters(parameters);
                camera.startPreview(); // 开始预览


今天留意到一个奇怪的bug:

Exception:Attempt to invoke virtual method 'void <span style="font-family: Arial, Helvetica, sans-serif;">$packname</span><span style="font-family: Arial, Helvetica, sans-serif;">.vo.UsedVO.setBdLat(double)' on a null object reference</span>
$packname.activity.HomeActivity.onDataUpdate(HomeActivity.java:869)
<pre name="code" class="html">$packname<span style="font-family: Arial, Helvetica, sans-serif;">.impl.ClassConcrete.postDataUpdate(ClassConcrete.java:125)</span>
$packname<span style="font-family: Arial, Helvetica, sans-serif;">.service.AppConnectService$SocketLongConnect$1.handleMessage(AppConnectService.java:211)</span>
android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:155)android.app.ActivityThread.main(ActivityThread.java:5696)java.lang.reflect.Method.invoke(Native Method)java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

 

出现的代码段是:

 chooiceVo.setBdLat(vo.getBd_lat());//这行报错了
 chooiceVo.setBdLng(vo.getBd_lng());
其中setBdLat()传入的只有double基本类型

而且vo.getBd-lat()返回的也只有基本类型,

这是个已经上线的项目,是编译通过的,理论上不会出现set或get的时候出现null,如果可以null,编译器也是不允许的,

于是网上找了找这个bug,没有细心找,也没有找到正确合理的解决方案,放到找到一个离谱的出现原因:

findViewById(int) null异常

http://www.itstrike.cn/Question/c1875732-f5bd-4f4c-9ff8-fde6a674bd56.html

本人怀疑是编译器的问题,或者java内部是使用反射运行的,只是猜测,有兴趣深入研究



textview显示出微信点赞的文字效果:

http://www.java123.net/v/440354.html

http://www.android100.org/html/201304/20/2237.html

这个有预览:http://www.2cto.com/kf/201409/331122.html

项目需要,自己改着写了一个:

/**
     * 生成可以点击的文字
     * @param
     * @return
     */
    public static SpannableStringBuilder addClickablePart(Activity activity,String[] names,boolean limit,final AdapterView.OnItemClickListener listener) {
        // 第一个赞图标
//        ImageSpan span = new ImageSpan(activity, R.drawable.icon_dynamic_like);
        SpannableString spanStr = new SpannableString("");
//        spanStr.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

        if (names==null) {
            names = new String[0];
        }
        SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);
        StringBuffer sb = new StringBuffer();
        for (String str:names) {
            sb.append(str+",");
        }
        if (sb.length()>0) {
            sb.deleteCharAt(sb.length()-1);
        }

        ssb.append(sb);

            // 最后一个
            for (int i = 0; i < names.length; i++) {
                if (limit && i>2) {
                    break;
                }
                final String name = names[i];
                final int start = sb.indexOf(name) + spanStr.length();
                final int index = i;
                ssb.setSpan(new ClickableSpan() {
                    @Override
                    public void onClick(View widget) {
                        if (listener!=null) {
                            listener.onItemClick(null,null,index,0);
                        }
                    }

                    @Override
                    public void updateDrawState(TextPaint ds) {
                        super.updateDrawState(ds);
                        // ds.setColor(Color.RED); // 设置文本颜色
                        // 去掉下划线
                        ds.setUnderlineText(false);
                    }
                }, start, start + name.length(), 0);
            }

        if (limit && names.length>2) {
            return ssb.append("等"
                    + names.length + "人赞了您");
        } else {
            return ssb.append("觉得赞");
        }
    }












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值