Android界面基本设置
Android笔记
1.安卓屏幕显示改成横向或者纵向
1:在配置文件AndroidManifest.xml中对Activity节点添加
android:screenOrientation属性(landscape是横向,portrait是纵向)
android:screenOrientation="portrait"
android:screenOrientation="landscape"
2 设置动态权限
//判断是否有权限
if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
//没有权限,申请权限,进入回调继续判断
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
@Override回调
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode !=1 || grantResults[0]!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(MainActivity.this, "没有权限", Toast.LENGTH_SHORT).show();
}
}
3 一张图片切成多张Bitmap(根据x,y轴切割)
使用Bitmap中的静态方法:BItmap.createBitmap(BItmap,x轴,y轴,切的宽,切的高);
public List<Bitmap> getImg( ){
List<Bitmap> list = new ArrayList<>();
//要加载图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.file);
for(int y=0;y<bitmap.getHeight();y+=bitmap.getHeight()/4){
for (int x = 0;x<bitmap.getWidth();x+=bitmap.getWidth()/3){
//切割图片并存到list集合中
list.add( Bitmap.createBitmap(bitmap,x,y,108,204));
}
}
return list;
}
4 自定义AlertDialog
① 画需要的UI
② 创建AlertDialog.Builder对象,通过该对象的setView()方法将view天骄的弹窗中
private AlertDialog.Builder builder;
private AlertDialog alertDialog;
private View view1;
view1 = LayoutInflater.from(this).inflate(R.layout.item,null,false);
builder = new AlertDialog.Builder(this).setView(view1);
builder.setCancelable(true);
alertDialog=builder.create();
//确定按钮
view1.findViewById(R.id.queding).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText ip1 = view1.findViewById(R.id.ip);
ip=ip1.getText().toString();
EditText port1 =view1.findViewById(R.id.port);
port = port1.getText().toString();
EditText username1 =view1.findViewById(R.id.username);
username=username1.getText().toString();
EditText password1=view1.findViewById(R.id.password);
password=password1.getText().toString();
System.out.println(ip);
System.out.println(port);
System.out.println(username);
System.out.println(password);
//初始化
cameraManager.setupInfo(textureView,"admin","admin","192.168.0.101","11");
/* if(!TextUtils.isEmpty(ip) && !TextUtils.isEmpty(port) && !TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)){
cameraManager.setupInfo(textureView,username,password,ip,port);
}else{
Toast.makeText(MainActivity.this, "请输入完整信息", Toast.LENGTH_SHORT).show();
}*/
// 弹窗隐藏
alertDialog.dismiss();
}
});
//弹窗显示
alertDialog.show();
5 控价移动
move.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//判断是那个控件
switch (view.getId()) {
case R.id.move:
// 触发事件
switch (motionEvent.getAction()) {
// 手指按下
case MotionEvent.ACTION_DOWN:
// 获取手指在屏幕上的x和y
x= (int) motionEvent.getRawX();
y= (int) motionEvent.getRawY();
System.out.println(x);
System.out.println(y);
break;
//移动
case MotionEvent.ACTION_MOVE:
//获取移动后手指的x和y
int dangx= (int) motionEvent.getRawX();
int dangy=(int) motionEvent.getRawY();
//手指移动的距离
int zuix=dangx-x;
int zuiy=dangy-y;
//通过layout()方法设置控价的位置
move.layout(move.getLeft()+zuix,move.getTop()+zuiy,move.getLeft()+zuix+move.getWidth(),move.getTop()+zuiy+move.getHeight());
left=ding.getLeft()-100;
top=ding.getTop()-100;
right=ding.getRight()+100;
bottom=ding.getBottom()+100;
if(move.getTop()>=top && move.getTop()<=bottom&& move.getLeft()>=left && move.getLeft()<=right ||
move.getBottom()>=top && move.getBottom()<=bottom && move.getRight()>=left && move.getRight()<=right ||
move.getTop()>=top && move.getTop()<=bottom && move.getRight()>=left && move.getRight()<=right||
move.getBottom()>=top && move.getBottom()<=bottom && move.getLeft()>=left && move.getLeft()<=right
){
ding.setText("刷卡");
}else{
ding.setText("");
}
// 重新获取手指在屏幕上的x和y
x=dangx;
y=dangy;
break;
}
break;
}
return true;
}
});
6 帧动画
// ① 在drawable文件中创建animation-list的xml文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" //为false一直循环,true循环一次
>
<item android:drawable="@drawable/f1" android:duration="80"/>
<item android:drawable="@drawable/f2" android:duration="80"/>
<item android:drawable="@drawable/f3" android:duration="80"/>
<item android:drawable="@drawable/f4" android:duration="80"/>
<item android:drawable="@drawable/f5" android:duration="80"/>
<item android:drawable="@drawable/f6" android:duration="80"/>
<item android:drawable="@drawable/f7" android:duration="80"/>
<item android:drawable="@drawable/f8" android:duration="80"/>
</animation-list>
② 在main.java中创建AnimationDrawable类
private AnimationDrawable animationDrawable;
//初始化,
animationDrawable= (AnimationDrawable) imageView.getBackground();
//开启
animationDrawable.start();
7 日期控件
//时间控件
private Calendar calendar;
private DatePickerDialog datePickerDialog;
// 有两个按钮来判断是哪个按下
public boolean startb=false,endb=false;
// 初始化并创建时间控件
calendar= Calendar.getInstance();
datePickerDialog= new DatePickerDialog(this,this,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)
);
// 通onDateSet回调事件来判断并给控件赋值
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
if(startb){
starttime_et.setText(String.format("%s-%s-%d",i,i1+1,i2));
startb=false;
}else if(endb){
endtime_et.setText(String.format("%s-%s-%s",i,i1+1,i2));
}
}
8 属性动画—— 旋转、透明、动画暂停和恢复
// 旋转
objectAnimator= ObjectAnimator.ofFloat(img_feng,"rotation",0f,360f);
objectAnimator.setDuration(5000);
// 透明
objectAnimator1= ObjectAnimator.ofFloat(img_deng,"alpha",1f,0f,1f);
objectAnimator1.setDuration(5000);
//暂停
animator.pause()
//恢复
animator.resume()
9 获取手机屏幕的宽和高
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
// 宽
System.out.println(point.x);
// 高
System.out.println(point.y);
未完成…