Android Studio 和 JAVA 小tips记录

目录

1.建立子线程

2.获取目的网址信息

3.设置固定横屏显示

4.设置app全屏显示

5.对屏幕滑动,点击等事件监听,实现特定功能

6.权限弹窗申请

7.动态弹窗申请打开GPS权限

8.点击按钮弹窗询问是否退出app

9.修改Android Studio默认app的主题

10.使用 List 列表集合实现特定对象数组集合

11.图像放大缩小处理

 12.随机颜色产生

13.Toast 使用

14.退出(销毁)当前弹窗 Dialog 的方法

15.Intent 的使用

16.SharedPreferences 的使用

17.Canva虚线绘制

18.添加自己设置的背景,按钮等样式

19.音频播放

20.获取某控件的高宽

21.double取整函数

22.java 保留几位小数

23.保持常亮的屏幕的状态

24.计算经纬度两点间的距离


1.建立子线程

//简单线程
new Thread(new Runnable() {//创建子线程
                @Override
                public void run() {

                    //功能实现
                }
            }).start();  

//刷新主界面线程
   runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //界面刷新代码
        }
    });

2.获取目的网址信息
 

public  senthttp(){
        try {
            //创建URL
            URL url = new URL("http://120.24.175.2:8080/file");//放网站
            //openConnection
            HttpURLConnection httpURLConnection =(HttpURLConnection)url.openConnection();
            //InputStream
            InputStream inputStream = httpURLConnection.getInputStream();
            //InputStreamReader
            InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
            //BufferedReader
            BufferedReader bufferedReader = new BufferedReader(reader);
            String temp = null;
            while ((temp = bufferedReader.readLine()) != null) {
                //如果不为空就一直取
                buffer.append(temp);
            }
            bufferedReader.close();//关闭
            reader.close();
            inputStream.close();
            Log.e("返回结果:",buffer.toString());//打印结果
           json= new JSONObject(buffer.toString());

        } catch (MalformedURLException e) {
            System.out.println("异常1");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("异常2");
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

3.设置固定横屏显示

在 AndroidManifest.xml文件中加入 android:screenOrientation="landscape" 。

 <activity
            android:name=".MainActivity"
            android:screenOrientation="landscape"//加入此句实现横屏显示
            android:exported="true">

4.设置app全屏显示

在 onCreate 方法中加入此句。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);

5.对屏幕滑动,点击等事件监听,实现特定功能

在上滑事件中,我加入了滑动区域判断,从而可以实现对屏幕指定区域滑动事件的监听并处理。

    //new一个手势检测器
    GestureDetector  detector = new GestureDetector(this,this);
    //以下方法为屏幕点击等事件触发
    //用GestureDetector处理在该activity上发生的所有触碰事件
    public boolean onTouchEvent(MotionEvent me){
        return detector.onTouchEvent(me);
    }
    @Override
    public boolean onDown(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                           float velocityY) {
        float minMove = 120;         //定义最小滑动距离
        float minVelocity = 0;      //定义最小滑动速度
        float beginX = e1.getX();
        float endX = e2.getX();
        float beginY = e1.getY();
        float endY = e2.getY();
        if(beginX-endX>minMove&&Math.abs(velocityX)>minVelocity){   //左滑
            //Toast.makeText(this,"左滑",Toast.LENGTH_SHORT).show();
            //功能实现
        }else if(endX-beginX>minMove&&Math.abs(velocityX)>minVelocity){   //右滑
            //Toast.makeText(this,"右滑",Toast.LENGTH_SHORT).show();
            //功能实现
        }else if(beginX>=1100&&beginX<=1900&&beginY>=200&&beginY<=900) {
            if(beginY - endY > minMove && Math.abs(velocityY) > minVelocity) {   //上滑
                //Toast.makeText(this, "上滑", Toast.LENGTH_SHORT).show();
                //功能实现
            }else if (endY - beginY > minMove && Math.abs(velocityY) > minVelocity) {   //下滑
                //Toast.makeText(this, "下滑", Toast.LENGTH_SHORT).show();
                //功能实现
            }
        }
    }

6.权限弹窗申请

方法中只示例了一个权限的申请,有多个权限可使用多个if语句进行判断和申请。将需要申请的权限名字替代下面示例中的 ACCESS_FINE_LOCATION 即可。注意,并不是所有权限的申请都会有弹窗提示,有些权限的申请在 AndroidManifest.xml 文件中声明即可。

 public void permission(){
        //1.先请求判断是否具有对应权限
        if(ContextCompat.checkSelfPermission
                (this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED)
        //根据返回的结果,判断对应的权限是否有。
        {
            ActivityCompat.requestPermissions
                    (this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},0);
        }
    }

7.动态弹窗申请打开GPS权限

在需要申请打开GPS是调用以下方法:

public void GPS() {
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        boolean isEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (!isEnabled) {
            androidx.appcompat.app.AlertDialog.Builder builder = new androidx.appcompat.app.AlertDialog.Builder(this);
            builder.setTitle("蓝牙扫描需要开启GPS,是否进入设置开启?").setNegativeButton("取消", null);
            builder.setPositiveButton("确认",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            startActivity(myIntent);
                        }
                    });
            builder.show();
        }
    }

8.点击按钮弹窗询问是否退出app

 public void outofapp(View view) {
        //定义一个新的对话框对象
        AlertDialog.Builder alertdialogbuilder=new AlertDialog.Builder(this);
        //设置对话框提示内容
        alertdialogbuilder.setMessage("确定要退出程序吗?");
        //定义对话框2个按钮标题及接受事件的函数
        alertdialogbuilder.setPositiveButton("确定",click1);
        alertdialogbuilder.setNegativeButton("取消",click2);
        //创建并显示对话框
        AlertDialog alertdialog1=alertdialogbuilder.create();
        alertdialog1.show();
    }
    private DialogInterface.OnClickListener click1=new DialogInterface.OnClickListener() {
            //使用该标记是为了增强程序在编译时候的检查,如果该方法并不是一个覆盖父类的方法,在编译时编译器就会报告错误。
            @Override
            public void onClick(DialogInterface arg0,int arg1) {
                //当按钮click1被按下时执行结束进程
                android.os.Process.killProcess(android.os.Process.myPid());
            }
    };
    private DialogInterface.OnClickListener click2=new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface arg0,int arg1)
              {
                  //当按钮click2被按下时则取消操作
                  arg0.cancel();
              }
    };

9.修改Android Studio默认app的主题

(新建项目的Empty Activity 模板中app默认主题的按钮为紫色等)

主题文件位置:res.values.themes 。修改下面语句中 parent 后面的内容即可,使用NoActionBar.Bridge 之后,按键就不默认为紫色了。

 <style name="Theme.Myblue" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">

10.使用 List 列表集合实现特定对象数组集合

方法示例:

此方法中,创建了一个 Bitmap 类型的List集合,传入一个整形,将返回整形指定数组位置存储的bitmap 对象。

public Bitmap getdirbitmap(int i){
        //此方法中list集合在每次方法调用中重复生成
      List<Bitmap> list = new ArrayList<Bitmap>();
      Matrix matrix = new Matrix();//图形处理
      matrix.postScale(0.1f,0.1f);
      //创建多个Bitmap对象
      Bitmap directionbit5 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir1)).getBitmap();
      Bitmap directionbit6 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir5)).getBitmap();
      Bitmap directionbit7 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir4)).getBitmap();
      Bitmap directionbit8 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir6)).getBitmap();
      Bitmap directionbit1 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir2)).getBitmap();
      Bitmap directionbit2 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir7)).getBitmap();
      Bitmap directionbit3 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir3)).getBitmap();
      Bitmap directionbit4 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir8)).getBitmap();
      Bitmap directionbit9 = ((BitmapDrawable)getResources().
              getDrawable(R.drawable.dir9)).getBitmap();
//将以上创建的Bitmap对象依次存入List集合       list.add(directionbit1);list.add(directionbit2);list.add(directionbit3);list.add(directionbit4); list.add(directionbit5);list.add(directionbit6);list.add(directionbit7);list.add(directionbit8);
list.add(directionbit9);
//取出想要位置的bitmap图像
      Bitmap dir = Bitmap.createBitmap(list.get(i-1),0,0,
              directionbit1.getWidth(),directionbit1.getHeight(),matrix,true);
      return dir;
  }

 (下面11点将对此方法中的其他内容进行解释)

11.图像放大缩小处理

   (接上面第十点的代码内容)

      Matrix matrix = new Matrix();//图形变化处理
      matrix.postScale(0.1f,0.1f);//此处是设置图像缩放的数值,此处是将图像x y缩小
      //利用上面设置好的缩小数值,在 List 中取出图片并将图片缩小后复制给 dir
      Bitmap dir = Bitmap.createBitmap(list.get(i-1),0,0,
                    directionbit1.getWidth(),directionbit1.getHeight(),matrix,true);
  

 postScale()方法: 

public boolean postScale(float sx, float sy, float px, float py)
//第一个参数是X轴的缩放大小,第二个参数是Y轴的缩放大小,第三四个参数是缩放中心点。

 12.随机颜色产生

double r = Math.random();//随机数产生, 0.0<=r<1.0
int num = (int) (r*7 + 1);  //将随机值转换到 1-7
//Color.BLUE 等数值是int型,直接创建对应数组
int[] color = new int[]{Color.BLUE,Color.GREEN,Color.YELLOW,
                            Color.LTGRAY,Color.RED,Color.GREEN,Color.YELLOW};
//取颜色
color[num-1];

13.Toast 使用

Toast.makeText(context, "提示消息", Toast.LENGTH_SHORT).show();

14.退出(销毁)当前弹窗 Dialog 的方法

dismiss();

15.Intent 的使用

显示:

Intent intent = new Intent();
intent.setClass(this, OtherActivity.class);//OtherActivity.class 为目的activity
startActivity(intent);

隐式:

Intent intent = new Intent();
intent.setAction(Intent.ACTION);//ACTION 为想要执行的动作
startActivity(intent);

16.SharedPreferences 的使用

//name 为存储数据的文件名, Context.MODE_PRIVATE为操作模式
SharedPreferences sh = this.getSharedPreferences("name", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sh.edit();
edit.putString("x", "123");   //x存储数据的名字即 key,字符串 123 为存储数据的值即 value
edit.commit();
/*
SharedPreferences的四种操作模式:
Context.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会首先检查文件是否存在,存在就往文件追加内容,否则就会创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
*/

17.Canva虚线绘制

private Paint p;//获取画笔
private  Canvas canvasTemp;
p.setPathEffect(new DashPathEffect(new float[]{4, 4}, 0));//设置画笔属性用于绘制虚线
canvasTemp.drawLine(100,100,200,200,p); 绘制坐标(100.100)到(200.200)的虚线
/*
虚线的样式属性(虚实间隔)由new DashPathEffect(new float[]{4, 4}, 0)的new float[]{4, 4}控制
*/

18.添加自己设置的背景,按钮等样式

1.再drawable文件夹下新建文件内容(这里展示了部分属性),文件名为:“myview.xml”:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    //这里是Linearlayout布局的背景颜色
    <solid android:color="#FFFFFF" />
    //这里是设置边框线的粗细和颜色
    <stroke
        android:width="1dp"
        android:color="@color/black" />
    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />
    //角的话,里边有参数可以单独设置
    <corners android:radius="3dp" />
</shape>

2.在想要引用的控件中以背景的形式引用即可:

 19.音频播放

//对象获取
static MediaPlayer player=null;
//判断状态
if (player != null && player.isPlaying()) player.stop();
if (player != null) player.release();
//获取音频资源,位于raw文件夹下
player = MediaPlayer.create(this, R.raw.m9_0);
//播放
try {
    if (player != null && !player.isPlaying()) player.start();
}catch(IllegalStateException e){
    //WriteLogtoSD("info","MediaPlayer Error."+e.getMessage());
 }

20.获取某控件的高宽

//控件的高宽必须在控件被加载出来了才能进行获取,不然获取到的值会是0,因此放入此方法中去获取。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
    int h = imageView.getHeight();
    int w = imageView.getWidth();
}

21.double取整函数

向上取整:Math.ceil(double a); 
向下取整:Math.floor(double a); 
四舍五入取整:Math.round(double a); 

22.java 保留几位小数

double one = 3.232131;
String  str = String.format("%.2f",one);
double two = Double.parseDouble(str);

23.保持常亮的屏幕的状态

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

24.计算经纬度两点间的距离

public  double getDistance(double lat1, double lng1, double lat2, double lng2) {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.pow(Math.sin(b / 2), 2)));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 10000d) / 10000d;
        s = s * 1000;
        return s;
    }

注:此博客内容会长期动态更新和增加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值