随手笔记

1、单击和长按
实现View.OnClickListener接口
设置监听tvCount.setOnClickListener(this);

实现View.OnLongClickListener
tvCount.setOnLongClickListener(this);
@Override
public boolean onLongClick(View view) {

    if (view.getId() == R.id.tv_count) {
        counter += 12;
        tvCount.setText(String.valueOf(counter));
        //true代表该事件已经结束;false之后还需要执行一次单击事件
        return true;
    } else {
        counter = 0;
        tvCount.setText(String.valueOf(counter));
        //true代表该事件已经结束;false之后还需要执行一次单击事件
        return true;
    }
}

2、触控
实现View.OnTouchListener
shock.setOnTouchListener(this);
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;//设为true才能监听到后续的手指离开时的操作
}

3、震动

振荡器
Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
vb.vibrate(new long[]{0, 100, 1000, 300}, 2);
} else if (motionEvent.getAction() == motionEvent.ACTION_MOVE) {
vb.vibrate(new long[]{0, 100, 1000, 300}, 2);
} else if (motionEvent.getAction() == motionEvent.ACTION_UP) {
vb.cancel();
}

4、颜色设置的四种方式
.setTextColor(Color.rgb(0, 0, 0));
.setTextColor(Color.Red);
.setTextColor(Color.argb(0,0, 0, 0));第一位参数为透明度
.setTextColor(Color.parseColor(“#4a90e2”));
5、显示隐藏
在AS中
@IntToString(
from = 0,
to = “VISIBLE”
), @IntToString(
from = 4,
to = “INVISIBLE”
), @IntToString(
from = 8,
to = “GONE”
)
6、监听输入框的变化
实现TextWatcher接口
etTemper.addTextChangedListener(this);
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
7、单选框(温度选择器实时刷新数据只需在监听输入框和radiogroup时调用相同方法)
RadioGroup.OnCheckedChangeListener
给RadioGroup加监听unit.setOnCheckedChangeListener(this);
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
}
注://这种通过找radiobutton的id的方法更加简单,获取id对象的text
int id = tickets.getCheckedRadioButtonId();
RadioButton ticks = (RadioButton) findViewById(id);
int num = ticketsNumber.getCheckedRadioButtonId();
RadioButton number = (RadioButton) findViewById(num);
tvViewTickets.setText(“您选择的是:” + ticks.getText().toString() + number.getText().toString() + “张”);
8、复选框
实现CompoundButton.OnCheckedChangeListener
加监听 btOrderFood.setOnClickListener(this);

    int[] chk_id = {R.id.cb_apple, R.id.cb_banana, R.id.cb_cabbage, R.id.cb_pear, R.id.cb_smaller};
    for (int i : chk_id) {
        chk = (CheckBox) findViewById(i);
        chk.setOnCheckedChangeListener(this);
    }

//复选框的监听事件
ArrayList selected = new ArrayList<>();
@Override
//注意返回是两个参数
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
selected.add(compoundButton);
} else {
selected.remove(compoundButton);
}
}
//选择食物
//两种方式,一种直接遍历全部checkbox,获取id,另一种监听checkbox,将id放入arraylist中
private void choiceFood() {
//第一种
// CheckBox chk;
// int[] id = {R.id.cb_apple, R.id.cb_banana, R.id.cb_cabbage, R.id.cb_pear};
// for (int i : id) {
// chk = (CheckBox) findViewById(i);
// if (chk.isChecked()) {
// msg += chk.getText().toString();
// }
// }
//第二种
String msg = “”;
for (CompoundButton chk : selected) {
msg += chk.getText();
}
if (msg.length() > 0) {
tvShowFood.setText(msg);
} else {
tvShowFood.setText(“请选择something”);
}
}
9、转换格式+特殊字符的使用 charC=”\u203”
String.format(“%.1f”, c) + getResources().getString(R.string.charC)
10、ImageView的缩放模式 (参考自别人博客,原作者忘记了。。。)
android:scaleType是控制图片如何resized/moved来匹对ImageView的size。

ImageView.ScaleType / android:scaleType值的意义区别:

CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽

FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示

FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置

FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置

FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示

MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。

、、要注意一点,Drawable文件夹里面的图片命名是不能大写的。
总结:

如果图片的尺寸大于ImageView 的大小,那么使用CENTER_INSIDE 或者 FIX_CENTER 会自动等比例缩小图片,居中显示的效果。

如果图片的尺寸小于 ImageView的大小,那么使用CENTER_CROP 或者 FIX_XY 会自动放大图片。其中 CENTER_CROP只会裁剪了图片的中间部分填充屏幕,而FIX_XY 则是将图片在XY 方向拉伸填充完整个ImageView。

11、AlertDialog

new AlertDialog.Builder(this).setTitle("Are You Ok!!")
                .setMessage("你到底好不好?")
                .setCancelable(false)
                .setNegativeButton("不好", this)
                .setPositiveButton("好", this)
                .setNeutralButton("你猜吧", null)
                .show();

@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (i == DialogInterface.BUTTON_POSITIVE) {
txv.setText(“你好我也好”);

    } else {
        txv.setText("其实不是很好");
    }

}

12、DatePickerDialog
实现DatePickerDialog.OnDateSetListener,
new DatePickerDialog(this, this, Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH).show();

@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
    txv_data.setText("日期" + i + "/" + (i1+1) + "/" + i2);
}

13、TimePickerDialog
实现 TimePickerDialog.OnTimeSetListener
new TimePickerDialog(this, this, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show();

@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
    txv_time.setText("时间" + i + ":" + i1);
}

14、一些常见的隐式跳转,备用,以后直接拿来用
case R.id.open_web:
//web搜索
Intent it2 = new Intent(Intent.ACTION_WEB_SEARCH);
it2.putExtra(SearchManager.QUERY, “薛之谦”);//选择浏览器搜索薛之谦
startActivity(it2);
break;
case R.id.open_phone:
//拨打电话
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse(“tel:10086”));//tel:10086
startActivity(it);
break;
case R.id.send_email:
//发email
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse(“mailto:@qq.com”));
it.putExtra(Intent.EXTRA_CC, new String[]{“@qq.com”});
it.putExtra(Intent.EXTRA_SUBJECT, “这是主题”);
it.putExtra(Intent.EXTRA_TEXT, “这是内容”);
startActivity(it);
break;
case R.id.send_message:
//发短信
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse(“sms:?body=好困!!!”));//收信人+要发送的内容
startActivity(it);
break;
case R.id.open_browser:
//打开浏览器
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse(“http://www.baidu.com“));
startActivity(it);
break;
case R.id.open_map:
//打开地图
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse(“geo:39.896068,116.151147”));
startActivity(it);
break;
15、调用系统照相显示的方法以及出现的问题

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Uri imgUri;
    Button bt_take_photos;
    Button bt_choice_photos;
    Button bt_send_photos;
    ImageView iv_photos;
    boolean needRotate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);//手机不随屏幕旋转
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//设置手机直向显示
        bt_take_photos = (Button) findViewById(R.id.bt_take_photos);
        bt_choice_photos = (Button) findViewById(R.id.bt_choice_photos);
        bt_send_photos = (Button) findViewById(R.id.bt_send_photos);
        iv_photos = (ImageView) findViewById(R.id.iv_photos_views);

        bt_take_photos.setOnClickListener(this);
        bt_choice_photos.setOnClickListener(this);
        bt_send_photos.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.bt_take_photos:
                //默认返回缩略图
//                Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//                startActivityForResult(it, 100);
                //相机程序存盘在读取
                String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
                String fname = "p" + System.currentTimeMillis() + ".jpg";
                imgUri = Uri.parse("file://" + dir + "/" + fname);
                Intent it = new Intent("android.media.action.IMAGE_CAPTURE");
                it.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
                startActivityForResult(it, 100);

                break;
            case R.id.bt_choice_photos:
                Intent it2 = new Intent(Intent.ACTION_GET_CONTENT);//选区内容
                it2.setType("image/*");
                startActivityForResult(it2, 101);
                break;
            case R.id.bt_send_photos:
                    Intent it3 = new Intent(Intent.ACTION_SEND);
                    it3.setType("image/*");
                    it3.putExtra(Intent.EXTRA_STREAM, imgUri);
                    startActivity(it3);

                break;

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {

            switch (requestCode) {
                case 100:
//            Bundle extras = data.getExtras();
//            //第一种默认返回的是照片的缩略图,想返回原始照片需要存取照片的Uri
//            Bitmap bmp = (Bitmap) extras.get("data");
                    //第二种获取路径中的照片,必须对照片过大的问题进行处理
//            Bitmap bmp = BitmapFactory.decodeFile(imgUri.getPath());
//            iv_photos.setImageBitmap(bmp);
                    //第三种
                    showImg();
                    break;
                case 101:
                    imgUri = convertUri(data.getData());
                    showImg();
                    break;
            }

        } else {
            Toast.makeText(this, requestCode == 100 ? "没有拍到照片" : "没有选取照片", Toast.LENGTH_SHORT).show();
        }

    }

    Uri convertUri(Uri uri) {
        if (uri.toString().substring(0, 7).equals("content")) {//以content开头的图像文件需要转换成file开头的文件路径
            String[] colName = {MediaStore.MediaColumns.DATA};//声明要查询的字段
            Cursor cursor = getContentResolver().query(uri, colName, null, null, null);
            cursor.moveToFirst();//移到查询结果的第一个记录
            uri = Uri.parse("file://" + cursor.getString(0));//将路径转化为uri
            cursor.close();
        }
        return uri;
    }

    private void showImg() {
        int iw, ih, vw, vh;
        BitmapFactory.Options option = new BitmapFactory.Options();//创建选项对象
        option.inJustDecodeBounds = true;//设置选项:只读取图像文件信息而不载入图像文件,不放入内存中
        BitmapFactory.decodeFile(imgUri.getPath(), option);//读取图像信息存入option
        //此处在sdk22以上版本会option报null,原因是系统读取权限问题,sdk23需要手动获取权限,较为简单的方法是将targetSdk改为22
        iw = option.outWidth;
        ih = option.outHeight;
        vw = iv_photos.getWidth();
        vh = iv_photos.getHeight();

        // int scaleFactor = Math.min(iw / vw, ih / vh);//计算缩小的比例

        int scaleFactor;
        if (iw < ih) {
            needRotate = false;
            scaleFactor = Math.min(iw / vw, ih / vh);//计算缩小的比例
        } else {
            needRotate = true;//需要旋转
            scaleFactor = Math.min(ih / vw, iw / vh);//改变旋转后宽高进行缩小的比例
        }

        option.inJustDecodeBounds = false;//图像信息放入内存
        option.inSampleSize = scaleFactor;//设置缩小比例
        Bitmap bmp = BitmapFactory.decodeFile(imgUri.getPath(), option);//载入图像文件
        if (needRotate) {
            Matrix matrix = new Matrix();
            matrix.postRotate(90);
            bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
        }
        iv_photos.setImageBitmap(bmp);

        new AlertDialog.Builder(this).setTitle("照片信息").setMessage("路径:" + imgUri.getPath() + "\n原始尺寸" + iw + "x" + ih + "\n载入尺寸" + bmp.getWidth() + "X" + bmp.getHeight() + "\n显示尺寸" + vw + "x" + vh + (needRotate ? "旋转" : "")).setNegativeButton("关闭", null).show();
    }
}

——————————持续更新——————————

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值