自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android 部分手机机型 FileProvider生成的Uri无法被识别

通过Uri.fromFile(file)或者FileProvider.getUriForFile(mContext, 包名.fileProvider",new File(imgCache.get(i) ))直接获取的Uri无法被访问导致上传图片大小为0.webview 进行拍照并提交照片给h5,开发过程中遇到华为部分机型提交的图片大小为0的情况,目前遇到的机型是荣耀X9,华为P20,

2024-06-05 09:11:54 324

原创 Android 自动滚动展示+ 进度条的dialog

Android 自动滚动展示+ 进度条的dialogXML布局 dialog_rage_progress<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_paren

2021-03-30 15:17:56 382

原创 react native 随手记之打包遇到坑

react native 打包drawable Resource and asset merger:Duplicate resources原因分析: drawable 中的图片重名解决方案:修改react-native的react.gradle文件。在路径your project/node_modules\react-native路径下,找到doFirst,在其后添加doLast doLast { def moveFunc = { resSuffi

2020-09-01 13:12:06 1267

原创 react native随手记之视频播放器video

react native 随手记之视频播放器Video文章目录react native 随手记之视频播放器Video一、导入三方库1.video2.slider二、 代码示例一、导入三方库1.video yarn add react-native-video2.slideryarn add react-native-slider二、 代码示例import React, {Component} from 'react';import {StyleSheet, View, Image, T

2020-08-26 10:15:51 439

原创 react native随手记之滑动选择器react-native-picker

一. 安装 yarn add react-native-picker 或 npm install react-native-picker --save二. 属性isLoop Android类型:boolean 默认:falsepickerTextElipsisLen Android类型:number 默认:6.pickerconfirmBtnText 右侧按钮显示文字类型:string 默认:confirm

2020-08-25 15:17:17 2162 3

原创 react native 随手记之关于物理返回键的坑

RN学习中关于物理返回键的随手记记录下RN关于监听物理返回键的方法,及遇到的坑 首先我要实现的是在导航界面中实现点击两次退出应用,其他子界面的时候点击返回 键回到上一级界面。首先记录下遇到的第一个坑 网上查找到的方法就是在componentDIDMount中注册BackHandler,我就在我的bottomNavigator 中去实现了代码,这时能实现了点击两次退出应用,但是,当跳转到子级界面时,返回键依然是点击两次退出应用,如果我在子级界面再去监听返回键的时候,就又把导航页的返回事件覆

2020-08-05 13:44:40 799

原创 react native 随手记之RSA加密解密

RSA加密解密安装 yarn add jsencrypt导入 import 'jsencrypt';加密/解密 /** * 加密 */ encrypt() { let encrypt = new JSEncrypt(); encrypt.setPublicKey(PUB_KEY); let encrypted = encrypt.encrypt(this.state.data); th

2020-07-31 15:32:33 404

原创 react native关于FlatList的随手记

FlatList注意:1. 滑出渲染区域后,内部状态不保留,请确保组件以外保留了数据 2. 为了优化内存占用同时保持滑动顺畅,列表内容会在屏幕外绘制,如果滑动速度超 过渲染速度,则会先看到空白内容 3. 继承自pureComponent 而非通常的Component,意味着props在浅比较中是相等的 则不会重新渲染 4. 默认情况下每行需要提供一个不重复的key属性,也可以提供一个keyExtractor函数来生成key1. itemSeparato

2020-07-29 17:10:15 551

原创 react native 关于StatusBar的随手记

# StatusBar##属性currentHeight状态栏高度注: 仅为Android平台属性animated是否以动画形式呈现(backgrounColor,barStyle,hidden)backgroundColor 状态栏背景色barStyle 状态栏文本颜色a: default 默认(Android:黑底白字,iOS:白底黑字)b: light-content 黑底白字c: dark-content 白底黑字hidden 是否隐藏

2020-07-20 14:51:43 242

原创 Android 标准体重进度条

@标准体重进度条第一篇博客贡献给我的自定义多段颜色进度条项目需求要写一个标准体重展示进度条 网上没有搜到示例,所以根据自己的理解写了一个git: https://github.com/bwyBai/-.##代码// An highlighted blockpublic class WeightBarView extends View { //第一段颜色画笔 private Paint firstPaint; // 第二段颜色画笔 private Pai

2020-06-16 15:08:25 464 2

访微信语音聊天

package com.alva.vcd; import java.util.ArrayList; import java.util.List; import com.alva.vcd.adapter.RecorderAdapter; import com.alva.vcd.pojo.Recorder; import com.alva.vcd.view.AudioRecorderButton; import com.alva.vcd.view.AudioRecorderButton.AudioFinishRecorderListener; import com.alva.vcd.view.MediaManager; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.graphics.drawable.AnimationDrawable; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.ListView; import android.widget.TextView; import android.os.Build; public class MainActivity extends Activity implements AudioFinishRecorderListener, OnItemClickListener { private ListView mListview; private AudioRecorderButton mAudioButton; private ArrayAdapter<Recorder> mAdapter; private List<Recorder> mDatas = new ArrayList<Recorder>();; private View mAnimView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); initViews(); initDatas(); initEvents(); } private void initViews() { mListview = (ListView) findViewById(R.id.listview_chat); mAudioButton = (AudioRecorderButton) findViewById(R.id.recorderButton); } private void initDatas() { mAudioButton.setAudioFinishRecorderListener(this); mAdapter = new RecorderAdapter(getApplicationContext(), mDatas); mListview.setAdapter(mAdapter); } private void initEvents() { mListview.setOnItemClickListener(this); } @Override public void onFinsh(float seconds, String filePath) { Recorder mRecorder = new Recorder(); mRecorder.setFilePath(filePath); mRecorder.setTime(seconds); mDatas.add(mRecorder); mAdapter.notifyDataSetChanged(); mListview.setSelection(mDatas.size() - 1); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.e("MediaManager", mDatas.get(arg2).getFilePath() + "sssss"); if (mAnimView != null) { mAnimView.setBackgroundResource(R.drawable.adj); mAnimView = null; } // 播放动画 mAnimView = arg1.findViewById(R.id.id_view); mAnimView.setBackgroundResource(R.drawable.play_anim); AnimationDrawable anim = (AnimationDrawable) mAnimView.getBackground(); anim.start(); // 播放音频 MediaManager.playSound(mDatas.get(arg2).getFilePath(), new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { mAnimView.setBackgroundResource(R.drawable.adj); } }); } @Override protected void onPause() { super.onPause(); MediaManager.pause(); } @Override protected void onResume() { super.onResume(); MediaManager.resume(); } @Override protected void onDestroy() { super.onDestroy(); MediaManager.release(); } }

2015-09-16

Android 柱状图

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); LinearLayout layout = (LinearLayout) findViewById(R.id.rela); layout.setGravity(Gravity.CENTER); LinearLayout.LayoutParams pm = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, 300); zxView = new ZXView(this, xlist, ylist, params); zxView.setLayoutParams(pm); layout.addView(zxView); }

2015-05-06

Android 手绘折线图

package com.example.linchartdemo.view; import java.util.List; import android.R.color; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class ZXView extends View { private List<Integer> xlist;// X坐标标签 private List<Integer> ylist;// Y坐标标签 private List<Integer> params;// 参数集合 private Paint paint; private Paint paintLines; private Paint paintArc; private Paint paintText; private int textsize = 20; private float Xoffset = 0;// X轴偏移或叫间隔 private float Yoffset = 0;// Y轴偏移或叫间隔 public float XSpac = 50; public float Xspac = 50; public float YSpac = 50; public float rightXspac = 50; public float rightYspac = 50; public float circleRadius = 10; private float lastX = -1; private float lastY = -1; public ZXView(Context context, List<Integer> xlists, List<Integer> ylists, List<Integer> paramss) { super(context); xlist = xlists; ylist = ylists; params = paramss; initWidget(); } public ZXView(Context context, AttributeSet attrs) { super(context, attrs); initWidget(); } public ZXView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initWidget(); } public void initViewData(List<Integer> xlists, List<Integer> ylists, List<Integer> paramss) { xlist = xlists; ylist = ylists; params = paramss; } @Override protected void onDraw(Canvas canvas) { drawXY(canvas); drawLine(canvas); super.onDraw(canvas); } public void updataUI() { invalidate(); } /** * 画折线 * * @param canvas */ private void drawLine(Canvas canvas) { Xoffset = ((getWidth()) - 20) / (xlist.size()); Yoffset = (getHeight()) / (ylist.size()); Log.i("texts", "X=" + Xoffset + "Y=" + Yoffset); float rulerOffset = 0; if (xlist.size() < 2) throw new IllegalArgumentException("the params argument is <2"); else rulerOffset = (xlist.get(1) - xlist.get(0)); if (params == null && params.size() <= 0) throw new IllegalArgumentException("the params is null or 0"); // Paint p = new Paint(); // p.setAntiAlias(true); // p.setTextSize(25); // p.setColor(Color.WHITE); // canvas.drawText("KW", 10 + Xoffset, 20, p); for (int i = 0; i < params.size(); i++) { int param = params.get(i); float histigramHight = param * (Yoffset / rulerOffset); float currentX = (Xoffset * i + Xspac + 5); float currentY = (getHeight() - YSpac - histigramHight); canvas.drawCircle(currentX, currentY, circleRadius, paintArc); if (lastX != -1) { canvas.drawLine(lastX, lastY, currentX, currentY, paintLines); } lastX = currentX; lastY = currentY; } // 重置lastX跟Y lastX = -1; lastY = -1; } /** * 画坐标轴 * * @param canvas */ private void drawXY(Canvas canvas) { canvas.drawLine(XSpac, 0, XSpac, getHeight() - 5 - XSpac, paint);// x canvas.drawLine(XSpac, getHeight() - XSpac, getWidth(), getHeight() - XSpac, paint);// y canvas.drawLine(getWidth(), 0, getWidth() - 1, getWidth() - YSpac, paint);// 右边Y float yoffset = getHeight() / ylist.size(); float xoffset = (getWidth() - XSpac) / xlist.size(); // 画字 for (int i = 0; i < ylist.size(); i++) { canvas.drawText(ylist.get(i) + "", 0, getHeight() - yoffset * i - YSpac, paintText); } for (int i = 0; i < xlist.size(); i++) { canvas.drawText(xlist.get(i) + "", XSpac + xoffset * i, getHeight() - YSpac + textsize, paintText); } // for (int i = 0; i < ylist.size(); i++) { // for (int j = 0; j < 50; j++) { // canvas.drawLine(XSpac + j * 303, yoffset * i - YSpac, XSpac + j // * 30 + 20, yoffset * i - YSpac, paint); // } // } } /** * 初始化画笔 */ private void initWidget() { paint = new Paint(); paint.setColor(Color.parseColor("#999999")); paint.setTypeface(Typeface.DEFAULT); paint.setAntiAlias(true); paint.setStrokeWidth(2); paintLines = new Paint(); paintLines.setColor(Color.parseColor("#00B4EA")); paintLines.setTypeface(Typeface.DEFAULT); paintLines.setAntiAlias(true); paintLines.setStrokeWidth(3); paintArc = new Paint(); paintArc.setColor(Color.parseColor("#EBEEEF")); paintArc.setTypeface(Typeface.DEFAULT); paintArc.setAntiAlias(true); paintArc.setStrokeWidth(2); paintText = new Paint(); // paintText.setColor(Color.parseColor("#ffffff")); paintText.setTypeface(Typeface.DEFAULT); paintText.setAntiAlias(true); paintText.setStrokeWidth(2); paintText.setTextSize(textsize); } }

2015-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除