Android开发仿咸鱼键盘DEMO(修改版)

在这里布局我就不贴出来了

/** * 最终被调用的修改价格dialog */ protected void editPriceDialog() { // TODO Auto-generated method stub editPriceView = View.inflate(this, R.layout.dialog_price_input_keyboard, null); priceDialog = new Dialog(this, R.style.contactdialog); priceDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); Window PriceDialogwindow = priceDialog.getWindow(); PriceDialogwindow.setGravity(Gravity.BOTTOM); priceDialog.setContentView(editPriceView); priceDialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; priceDialog.show(); tv_softkb_point = (TextView) editPriceView.findViewById(R.id.tv_softkb_point); buffer = new StringBuffer(); stringbuffer = buffer.toString(); buffer2 = new StringBuffer(); stringbuffer2 = buffer2.toString(); etGoodsPrice = (EditText) editPriceView.findViewById(R.id.et_goodsPrice); etGoodsPrice.addTextChangedListener(new TextWatcher() { private String etPricetrim; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { etPricetrim = s.toString().trim(); if (etPricetrim.length() == 1 && s.toString().equals(".")) { //如果edittext的长度为1并且用户只输入了一个.那么buffer里追加"0" + "." 同时删除我们输入的点 //如果不删除的在则 buffer里的数据会是 .0. buffer.append("0").append(".").deleteCharAt(0); etGoodsPrice.setText(buffer.toString()); } if (s.toString().contains(".")) { //如果s里包含点 if (s.length() - 1 - s.toString().indexOf(".") > 2) { if(tv_softkb_point!=null){ tv_softkb_point.setClickable(false); } if(buffer!=null&&buffer.length()>=1){ buffer.deleteCharAt(buffer.length()-1); } s = s.toString().subSequence(0, s.toString().indexOf(".") + 3); etGoodsPrice.setText(s); etGoodsPrice.setSelection(s.length()); } else if(s.length()-1-s.toString().indexOf(".")<=2){ if(tv_softkb_point!=null){ tv_softkb_point.setClickable(false); } } } else { if(tv_softkb_point!=null) { tv_softkb_point.setClickable(true); tv_softkb_point.setEnabled(true); } } if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { //如果以0开头长度大于1 第二个元素不是. if (!s.toString().substring(1, 2).equals(".")) { buffer.deleteCharAt(1); etGoodsPrice.setText(s.subSequence(0, 1)); etGoodsPrice.setSelection(1); return; } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { int length = etPricetrim.length(); if (length >=1) { etGoodsPrice.setSelection(length); } else { etGoodsPrice.setSelection(0); } // Toast.makeText(PostIssueActivity.this,s.toString(), 0).show(); if(s.toString()!=null&&s.toString().contains(".")){ //通过s取出当前editext上的传 来判断是否包含. 如果包含的话则把 clickbale设置成false同时置为不可点击 if(tv_softkb_point!=null) { tv_softkb_point.setClickable(false); tv_softkb_point.setEnabled(false); } } // if(s.toString().length()==1&&s.toString().equals("0")) { //如果长度是1 并且是以0开头 这个时候光标是定位在0后 则删除buffer // //里的第一个char 并设置 // //// buffer.deleteCharAt(0); //// etGoodsPrice.setText(buffer.toString()); // // } } }); if (!iPriceEdit.getText().toString().substring(1, iPriceEdit.getText().length()).toString().equals("0.00")) { etGoodsPrice .setText(iPriceEdit.getText().toString().substring(1, iPriceEdit.getText().length()).toString()); etGoodsPrice.setSelection(etGoodsPrice.length()); buffer.append(iPriceEdit.getText().toString().substring(1, iPriceEdit.getText().length()).toString()); } else { etGoodsPrice.setText(""); etGoodsPrice.setHint("0.00"); buffer.append(""); } etOriginalPrice = (EditText) editPriceView.findViewById(R.id.et_originalPrice); etOriginalPrice.addTextChangedListener(new TextWatcher() { private String trim; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { trim = s.toString().trim(); if (etOriginalPrice.length() == 1 && s.toString().equals(".")) { buffer2.append("0").append(".").deleteCharAt(0); etOriginalPrice.setText(buffer2.toString()); } if (s.toString().contains(".")) { if (s.length() - 1 - s.toString().indexOf(".") > 2) { if(tv_softkb_point!=null){ tv_softkb_point.setClickable(false); } if(buffer2!=null&&buffer2.length()>=1){ buffer2.deleteCharAt(buffer2.length()-1); } s = s.toString().subSequence(0, s.toString().indexOf(".") + 3); etOriginalPrice.setText(s); etOriginalPrice.setSelection(s.length()); } else if(s.length()-1-s.toString().indexOf(".")<=2){ if(tv_softkb_point!=null){ tv_softkb_point.setClickable(false); } } } else { if(tv_softkb_point!=null) { tv_softkb_point.setClickable(true); tv_softkb_point.setEnabled(true); } } if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { if (!s.toString().substring(1, 2).equals(".")) { buffer2.deleteCharAt(1); etOriginalPrice.setText(s.subSequence(0, 1)); etOriginalPrice.setSelection(1); return; } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub int length = trim.length(); if (length >=1) { etOriginalPrice.setSelection(length); } else { etOriginalPrice.setSelection(0); } if(s.toString()!=null&&s.toString().contains(".")){ if(tv_softkb_point!=null) { tv_softkb_point.setClickable(false); tv_softkb_point.setEnabled(false); } } // if(s.toString().length()==1&&s.toString().equals("0")) { //如果长度是1 并且是以0开头 这个时候光标是定位在0后 则删除buffer // //里的第一个char 并设置 // // buffer2.deleteCharAt(0); // etOriginalPrice.setText(buffer2.toString()); // // } } }); etOriginalPrice.setSelection(etOriginalPrice.length()); if (!iOldPriceEdit.getText().subSequence(1, iOldPriceEdit.getText().length()).toString().equals("0.00")) { etOriginalPrice .setText(iOldPriceEdit.getText().subSequence(1, iOldPriceEdit.getText().length()).toString()); buffer2.append(iOldPriceEdit.getText().subSequence(1, iOldPriceEdit.getText().length()).toString()); } else { etOriginalPrice.setText(""); etOriginalPrice.setHint("0.00"); buffer2.append(""); } // etOriginalPrice.requestFocus(); // etOriginalPrice.setSelection(etGoodsPrice.getText().length()); ImageView tv_softkb_hiddenkb = (ImageView) editPriceView.findViewById(R.id.tv_softkb_hiddenkb); ImageView ivDelete = (ImageView) editPriceView.findViewById(R.id.iv_delete); ivDelete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Toast.makeText(PostIssueActivity.this, "dddd", 0).show(); delNumber(); } }); // 长按删除键 事件 ivDelete.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.delete(0, etGoodsPrice.getText().length()); // if(etGoodsPrice.getText().length()>=1){ // buffer.deleteCharAt(etGoodsPrice.getText().length()-1); // } stringbuffer = buffer.toString(); etGoodsPrice.setText(stringbuffer.substring(0, stringbuffer.length())); } if (etOriginalPrice.hasFocus()) { buffer2.delete(0, etOriginalPrice.getText().length()); // if(etOriginalPrice.getText().length()>=1){ // buffer2.deleteCharAt(etOriginalPrice.getText().length()-1); // } stringbuffer2 = buffer2.toString(); etOriginalPrice.setText(stringbuffer2.substring(0, stringbuffer2.length())); } return false; } }); setNumber(buffer, buffer2, etGoodsPrice, etOriginalPrice); tv_softkb_hiddenkb.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { editPriceView.clearAnimation(); priceDialog.cancel(); } }); TextView confirmKB = (TextView) editPriceView.findViewById(R.id.tv_confirmKB); hiddenSoftKB(etGoodsPrice, etOriginalPrice); confirmKB.setOnClickListener(new OnClickListener() { @SuppressLint("NewApi") @Override public void onClick(View v) { // iPriceEdit // iOldPriceEdit if (buffer != null) { // iPriceEdit.setText("¥"+buffer.toString()); iPriceEdit.setText("¥" + etGoodsPrice.getText().toString()); if (etGoodsPrice.getText().toString().equals("")) { iPriceEdit.setText("¥" + "0.00"); } } if (buffer2 != null) { // iOldPriceEdit.setText("¥"+buffer2.toString()); iOldPriceEdit.setText("¥" + etOriginalPrice.getText().toString()); if (etOriginalPrice.getText().toString().equals("")) { iOldPriceEdit.setText("¥" + "0.00"); } } if(etGoodsPrice.getText().toString().equals("")){ etGoodsPrice.setText("0.00"); } if(etOriginalPrice.getText().toString().equals("")){ etOriginalPrice.setText("0.00"); } if(Double.valueOf(etGoodsPrice.getText().toString())>Double.valueOf(etOriginalPrice.getText().toString())) { // Toast.makeText(PostIssueActivity.this, "售价高于原价,是否确认?", 0).show(); PublicDialog PriceIsMaxDialog = PublicDialog.createDialog(PostIssueActivity.this, new DialogBtnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.public_dialog_cancel: editPriceView.clearAnimation(); priceDialog.cancel(); break; case R.id.public_dialog_confirm: editPriceView.clearAnimation(); priceDialog.cancel(); break; default: break; } } }); Window dialogwindow = PriceIsMaxDialog.getWindow(); Display display = getWindowManager().getDefaultDisplay(); WindowManager.LayoutParams lp = dialogwindow.getAttributes(); lp.width = (int) (display.getWidth() * 0.99); dialogwindow.setAttributes(lp); PriceIsMaxDialog.show(); LinearLayout llPublic = (LinearLayout) PriceIsMaxDialog.findViewById(R.id.ll_public_dialog); llPublic.setBackground(getResources().getDrawable(R.drawable.public_dialog_botom_corner_shape_wite)); PriceIsMaxDialog.onWindowFocusChanged(true); // View splitling = PriceIsMaxDialog.findViewById(R.id.v_line); // splitling.setBackgroundColor(color.color_eaeaea); PriceIsMaxDialog.setLineColor(Color.parseColor("#E9E9EB")); PriceIsMaxDialog.setTitle("提示"); PriceIsMaxDialog.setContent("出价高于原价,是否确认?"); PriceIsMaxDialog.setTitleVisibility(true); TextView contentView = PriceIsMaxDialog.getContentView(); contentView.setTextSize(16); contentView.setGravity(Gravity.CENTER); contentView.setPadding(0, 0, 0, 10); android.view.ViewGroup.LayoutParams layout = contentView.getLayoutParams(); layout.width = lp.MATCH_PARENT; layout.height = 120; contentView.setLayoutParams(layout); TextView publicdialogCancle = (TextView) PriceIsMaxDialog.findViewById(R.id.public_dialog_cancel); publicdialogCancle.setText("否"); PriceIsMaxDialog.setCancelTextColor(Color.parseColor("#037BFE")); // PriceIsMaxDialog.setCancelBackGround(Color.parseColor("#ffffff")); // publicdialogCancle.setTextColor(color.app_green); TextView publicdialogConfirm = (TextView) PriceIsMaxDialog.findViewById(R.id.public_dialog_confirm); publicdialogConfirm.setText("是"); PriceIsMaxDialog.setConfirmTextColor(Color.parseColor("#037BFE")); // PriceIsMaxDialog.setConfirmBackGround(Color.parseColor("#ffffff")); // publicdialogConfirm.setTextColor(color.app_green); // publicdialogConfirm.setBackground(getResources().getDrawable(R.drawable.coners_save_bg)); PriceIsMaxDialog.findViewById(R.id.vv_hor).setVisibility(View.VISIBLE); } editPriceView.clearAnimation(); priceDialog.cancel(); } }); } /** * 删除输入的金额 */ protected void delNumber() { if (etGoodsPrice.hasFocus()) { // buffer.delete(0, etGoodsPrice.getText().length()); if (etGoodsPrice.getText().length() >= 1) { buffer.deleteCharAt(etGoodsPrice.getText().length() - 1); // buffer.deleteCharAt(etGoodsPrice.getText().length()); } stringbuffer = buffer.toString(); etGoodsPrice.setText(stringbuffer.substring(0, stringbuffer.length())); etGoodsPrice.setSelection(etGoodsPrice.length()); } if (etOriginalPrice.hasFocus()) { // buffer2.delete(0,etOriginalPrice.getText().length()); if (etOriginalPrice.getText().length() >= 1) { buffer2.deleteCharAt(etOriginalPrice.getText().length() - 1); // buffer2.deleteCharAt(etOriginalPrice.getText().length()); } stringbuffer2 = buffer2.toString(); etOriginalPrice.setText(stringbuffer2.substring(0, stringbuffer2.length())); etOriginalPrice.setSelection(etOriginalPrice.length()); } } /** * 输入金额 * * @param buffer * @param buffer2 * @param etGoodsPrice * @param etOriginalPrice */ private void setNumber(final StringBuffer buffer, final StringBuffer buffer2, final EditText etGoodsPrice, final EditText etOriginalPrice) { TextView tv_softkb_1 = (TextView) editPriceView.findViewById(R.id.tv_softkb_1); tv_softkb_1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("1"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("1"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_2 = (TextView) editPriceView.findViewById(R.id.tv_softkb_2); tv_softkb_2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("2"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("2"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_3 = (TextView) editPriceView.findViewById(R.id.tv_softkb_3); tv_softkb_3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("3"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("3"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_4 = (TextView) editPriceView.findViewById(R.id.tv_softkb_4); tv_softkb_4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("4"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("4"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_5 = (TextView) editPriceView.findViewById(R.id.tv_softkb_5); tv_softkb_5.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("5"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("5"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_6 = (TextView) editPriceView.findViewById(R.id.tv_softkb_6); tv_softkb_6.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("6"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("6"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_7 = (TextView) editPriceView.findViewById(R.id.tv_softkb_7); tv_softkb_7.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("7"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("7"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_8 = (TextView) editPriceView.findViewById(R.id.tv_softkb_8); tv_softkb_8.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("8"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("8"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_9 = (TextView) editPriceView.findViewById(R.id.tv_softkb_9); tv_softkb_9.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("9"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("9"); etOriginalPrice.setText(buffer2.toString()); } } }); TextView tv_softkb_0 = (TextView) editPriceView.findViewById(R.id.tv_softkb_0); tv_softkb_0.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("0"); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("0"); etOriginalPrice.setText(buffer2.toString()); } } }); tv_softkb_point.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etGoodsPrice.hasFocus()) { buffer.append("."); etGoodsPrice.setText(buffer.toString()); } if (etOriginalPrice.hasFocus()) { buffer2.append("."); etOriginalPrice.setText(buffer2.toString()); } } }); } /** * 使用edittext获取焦点弹不出软件键盘 * * @param etGoodsPrice * @param etOriginalPrice */ private void hiddenSoftKB(final EditText etGoodsPrice, final EditText etOriginalPrice) { etGoodsPrice.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int inType = etGoodsPrice.getInputType(); // backup the input // type etGoodsPrice.setInputType(InputType.TYPE_NULL); // disable soft // input etGoodsPrice.onTouchEvent(event); // call native handler etGoodsPrice.setInputType(inType); // restore input type etGoodsPrice.setSelection(etGoodsPrice.getText().length()); return true; } }); etOriginalPrice.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int inType = etOriginalPrice.getInputType(); // backup the input // type etOriginalPrice.setInputType(InputType.TYPE_NULL); // disable // soft // input etOriginalPrice.onTouchEvent(event); // call native handler etOriginalPrice.setInputType(inType); // restore input type etOriginalPrice.setSelection(etOriginalPrice.getText().length()); return true; } }); } /** * 输入原价和价格dialog */ private void showMofityPrice() { // TODO Auto-generated method stub mofityPrice.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // iPriceEdit // iOldPriceEdit // iPriceEdit.setFocusable(true); hiddenKeyboard(); editPriceDialog(); } }); }

以上所述是小编给大家介绍的Android开发仿咸鱼键盘修改版,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-20 07:47:07

Android开发仿咸鱼键盘DEMO(修改版)的相关文章

Android开发之软键盘用法实例分析

  本文实例讲述了Android开发中软键盘用法.分享给大家供大家参考.具体如下: 打开软键盘,有两个方法.一个是showSoftInput,一个是toggleSoftInput. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package com.example.dd; i

Android开发仿映客送礼物效果_Android

这里写链接内容仿映客送小礼物的特效,顺便复习一下属性动画,话不多说先看效果图. 需求分析 可以看到整个动画有几部分组成,那我们就把每个部分拆分出来各个击破. 1.要显示那些内容以及内容间的位置关系? 可以看到我们要显示用户头像,昵称,礼物图标以及数量.所以这里我选择用FrameLayout来作为根布局. 2.需要哪些动画以及动画的执行顺序? a.首先是整体从左到右飞入并有一个回弹(translationX + OvershootInterpolator) b.然后是礼物从左到右飞入而且是一个带减

Android开发仿扫一扫实现拍摄框内的照片功能_Android

就是仿照现在扫一扫的形式,周围是半透明的遮挡,然后中间是全透明的,拍摄后只截取框内的内容 查了很多博客,实现起来真的太复杂了,本人比较怕麻烦所以在很多地方偷懒了 先上效果图: 第一步:设置照相机预览以及拍照 这是所有步骤的前提,没有预览,用户怎么知道自己拍的什么呢.预览用的是SurfaceView 这篇博文写得已经十分详细了,打开照相机,然后拍照,而且十分简洁!不想别的博客一下就几百行代码不知所云.这篇代码可以复制下去当相机模版使用. 这里遇到一个问题,就是预览的效果是左转90度的,拍出来也是左

Android开发之软键盘用法实例分析_Android

本文实例讲述了Android开发中软键盘用法.分享给大家供大家参考.具体如下: 打开软键盘,有两个方法.一个是showSoftInput,一个是toggleSoftInput. package com.example.dd; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.Menu; import android.view.View

Android 开发仿简书登录框可删除内容或显示密码框的内容_Android

简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedittextdemo; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.text.Editable; impor

Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果_Android

我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果

我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

Android开发仿映客送礼物效果

这里写链接内容仿映客送小礼物的特效,顺便复习一下属性动画,话不多说先看效果图. 需求分析 可以看到整个动画有几部分组成,那我们就把每个部分拆分出来各个击破. 1.要显示那些内容以及内容间的位置关系? 可以看到我们要显示用户头像,昵称,礼物图标以及数量.所以这里我选择用FrameLayout来作为根布局. 2.需要哪些动画以及动画的执行顺序? a.首先是整体从左到右飞入并有一个回弹(translationX + OvershootInterpolator) b.然后是礼物从左到右飞入而且是一个带减

Android开发仿扫一扫实现拍摄框内的照片功能

就是仿照现在扫一扫的形式,周围是半透明的遮挡,然后中间是全透明的,拍摄后只截取框内的内容 查了很多博客,实现起来真的太复杂了,本人比较怕麻烦所以在很多地方偷懒了 先上效果图: 第一步:设置照相机预览以及拍照 这是所有步骤的前提,没有预览,用户怎么知道自己拍的什么呢.预览用的是SurfaceView 这篇博文写得已经十分详细了,打开照相机,然后拍照,而且十分简洁!不想别的博客一下就几百行代码不知所云.这篇代码可以复制下去当相机模版使用. 这里遇到一个问题,就是预览的效果是左转90度的,拍出来也是左