二维码(android)

摘要:
3、我们都发现常见的二维码中间有个小图片,所以我们先下载一张图片放入res下的drawable—hdpi处。

我们都知道一般的二微码都是以不同形式显示有的是登入,有的是网页,其实二维码只是一个字符串。到这里我们就有一个疑问那二维码是这样判断是网站或者是登入功能的呢?

其实这些判断部分,二维码生成器早就给你完成了,我们只需导入一个core-3.2.1.jar包就行。那接下来我们来做一个简单的小案例,进一步了解二维码。

一、新建项目

1、我们建一个名为"weima"的项目。

2、在该项目libs下导入一个core-3.2.1.jar包(注:下载地址:http://pan.baidu.com/s/1i5FiYXZ),你也可以在百度搜索。

二维码(android)第1张

3、我们都发现常见的二维码中间有个小图片,所以我们先下载一张图片放入res下的drawable—hdpi处。

二维码(android)第2张二维码(android)第3张

二、布局文件

1、首先我们添加一个EditText输入框和一个Button按钮,一个ImageView控件用来显示二维码的图标。

2、当我们在输入框输入完数字或网址时,点击Button按钮后,就会在ImageView控件生成一个二维码。

3、当我们添加EditText,可能由于版本问题会出现无法点击界面,以下问题。

二维码(android)第4张

4、EditText由于版本问题所以要将版本调到19,调版本的在右上角安卓机器人图标处。

二维码(android)第5张

activity_main.xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.weima.MainActivity" >

     <EditText
        android:id="@+id/editText1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:layout_marginLeft="38dp"android:layout_marginTop="33dp"android:ems="10" >

        <requestFocus />
    </EditText>
    
   <Button
        android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignRight="@+id/editText1"android:layout_below="@+id/editText1"android:layout_marginRight="20dp"android:layout_marginTop="22dp"android:text="Button" />

    <ImageView
        android:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/editText1"android:layout_below="@+id/button1"android:layout_marginLeft="14dp"android:layout_marginTop="47dp" />
    
</RelativeLayout>

三、MainActivity的代码

MainActivity.java文件:

public class MainActivity extendsActivity {

    privateEditText ent;
    privateButton btn;
    privateImageView img;
    private static final int IMAGE_HALFWIDTH = 35;//图片宽度值大小
@Override
    protected voidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ent=(EditText)findViewById(R.id.editText1);
        img=(ImageView)findViewById(R.id.imageView1);
        btn=(Button)findViewById(R.id.button1);
        btn.setOnClickListener(newOnClickListener(){

            @Override
            public voidonClick(View v) {
                //TODO Auto-generated method stub
                //取出字符串
                String entText=ent.getText().toString();
                Bitmap log=BitmapFactory.decodeResource(getResources(), R.drawable.weixintubiao);
                
                try{
                    Bitmap bm=createCode(entText,log,BarcodeFormat.QR_CODE);
                    img.setImageBitmap(bm);
                } catch(WriterException e) {
                    e.printStackTrace();
                }
            }});
    }

    public Bitmap createCode(String string,Bitmap mBitmap, BarcodeFormat format)throwsWriterException
    {
        
        //Matrix,中文里叫矩阵,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
        Matrix mat=newMatrix();
        float imgX=(float)2*IMAGE_HALFWIDTH/mBitmap.getWidth();
        float imgY=(float)2*IMAGE_HALFWIDTH/mBitmap.getHeight();
        mat.setScale(imgX,imgY);//设置缩放信息
        //将logo图片按martix设置的信息缩放
        mBitmap = Bitmap.createBitmap(mBitmap, 0, 0,mBitmap.getWidth(), mBitmap.getHeight(), mat, false);
        MultiFormatWriter writer=newMultiFormatWriter();
        Hashtable htable=newHashtable();
        htable.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码
        //生成二维码矩阵信息
        BitMatrix matrix = writer.encode(string, format, 800, 800, htable);
        int width=matrix.getWidth();//矩阵宽度
        int height=matrix.getHeight();//矩阵高度
        int matW=width/2;
        int matH=height/2;
        int[] pixels = new int[width * height];//定义数组长度为矩阵高度*矩阵宽度,用于记录矩阵中像素信息
        for(int y=0;y<height;y++){//从行开始迭代矩阵
        for(int x=0;x<width;x++)//迭代列
{
            if (x > matW - IMAGE_HALFWIDTH && x < matW + IMAGE_HALFWIDTH && y > matH - IMAGE_HALFWIDTH && y < matH +IMAGE_HALFWIDTH) {
                //该位置用于存放图片信息
                //记录图片每个像素信息
                pixels[y * width + x] = mBitmap.getPixel(x - matW+ IMAGE_HALFWIDTH, y - matH +IMAGE_HALFWIDTH); 
            }
            else{
                if(matrix.get(x, y)) {
                    //如果有黑块点,记录信息
                    pixels[y * width + x] = 0xff000000;//记录黑块信息
}
            }
        }
    }
        Bitmap bitmap =Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
        //通过像素数组生成bitmap
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        returnbitmap;
    }

   
}

1、首先我们定义三个控件变量,通过R文件找到控件ID进行相关的操作,为Button控件添加的相关的onClick点击事件。

2、通过调用系统的Bitmap类对来对图片进行相关的操作。

3、通过createCode生成二维码并嵌入图标。

最终效果图:

二维码(android)第6张

免责声明:文章转载自《二维码(android)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据库打开时报错该如何解决WebService学习总结(四)——调用第三方提供的webService服务,使用cxf下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置

一、前情回顾 哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆! 更新: 这篇文章得到张善友,张队的阅读,并提供了另一个方案,大家可以看看,也是不错的。 地址: https://mp.weixin.qq.com/s/CCGANQ5i0Ainq3jcSt7k4A 放假这两...

[家里蹲大学数学杂志]第328期詹兴致矩阵论习题参考解答

说明: 1. 大部分是自己做的, 少部分是参考文献做的, 还有几个直接给出参考文献. 2. 如果您有啥好的想法, 好的解答, 热切地欢迎您告知我, 或者在相应的习题解答网页上回复. 哪里有错误, 也盼望您指出. 3. 毕竟大学时学过高等代数, 想多学点矩阵论的东西 (matrix=magic), 就先选这本书看看了. 目录 序言 第一章 预备知识 第...

讨论研究普通的网页登录按钮的状态

     就在我刚才看一个技术视频的时候,里面提到了一个包括我在内的被很多程序开发人员忽视的问题。这个问题不管是在软件开发工作了几年的技术丰富的研发人员还是刚刚入行的菜鸟往往忽视掉,那就是在网页的登录功能的登录按钮有几种状态呢?分别表示怎样的功能含义呢?下来我们就来说明一下。 1、现在在每个软件开发项目和产品中都会有用户登录的界面,不管是系统或者网站都会有...

Android使用GoogleMap v2(一)

使用之前的一些准备: https://developers.google.com/maps/documentation/android/start#get_an_android_certificate_and_the_google_maps_api_key (官网的详细教程) Creating a new Android application that...

页面添加水印兼容IE9

1、如何给页面添加定制水印 定制水印一般指的是可以指定任何文字,给页面添加定制水印有多种方法: 背景图方式 创建元素,悬浮在页面之上的方式 1.1、通过背景图给页面添加定制水印(会被子元素的背景覆盖) 通过背景图添加定制水印: 首先制做定制水印,定制水印可以通过 canvas 绘画出来 然后通过 background-image 属性将 canvas...

pyhton安装pillow问题解决

最近在学习Python的微信处理相关,因wxpy库中的微信客户端需要接收二维码需要安装pillow,如下 class wxpy.Bot(cache_path=None, console_qr=False, qr_path=None, qr_callback=None, login_callback=None, logout_callback=None)[源...