android 选取图片部分显示(验证码)

来源:互联网 发布:python scikit learn 编辑:程序博客网 时间:2024/04/30 00:26

最近在做一些小游戏,然后难免就遇到一些矢量图集成的全部图片。(即一张图包含n个独立图片)

这里尝试使用最简单的方法canvas来取出所要的图片。(当前图片就只有一张,上面有0-9是个数字,考虑将其中一个个的数字切割下来,需要显示什么数字,组合一下就好了。


示例程序:

在editText中输入数据,然后提交按键由图片截取并转换成类似验证码的形式。



其中,数字图片只有一张,如图:


具体实现方法

先自定义iew:

public class MyView extends View{private Bitmap num[] = new Bitmap[10];private int iconWidth=30,iconHeight=50;private boolean isFirst;private String str = new String();public MyView(Context context, AttributeSet attrs) {super(context, attrs);isFirst = true;initNum();}public void initNum(){Bitmap resource = BitmapFactory.decodeResource(this.getResources(), R.drawable.num);           for(int i=0;i<10;i++)        num[i] = Bitmap.createBitmap(resource, 0, i*11 , 7, 11);   //初始化数字图片,其width为7,height为11}protected void onDraw(Canvas canvas) {if(isFirst){isFirst = false;for(int i=0;i<4;i++)canvas.drawBitmap(num[i], null, new Rect(iconWidth*i, 0, (i+1)*iconWidth, iconHeight), null);}else{//点击之后更新数据char numbers[] = str.toCharArray();  //将获取的editText字符串妆化为数组for(int i=0;i<numbers.length;i++)canvas.drawBitmap(num[numbers[i]-'0'], null, new Rect(iconWidth*i, 0, (i+1)*iconWidth, iconHeight), null);}}public void setNumbers(String s){str = s;}}



布局文件:

<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=".NumberTest" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="输入数字:" />    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/textView1"        android:layout_below="@+id/textView1"        android:ems="10" >    </EditText>        <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/textView1"        android:layout_below="@+id/myview"        android:text="显示" />    <com.qiao.numbertest.MyView        android:id="@+id/myview"        android:layout_width="wrap_content"        android:layout_height="50dp"        android:layout_alignLeft="@+id/editText1"        android:layout_alignRight="@+id/editText1"        android:layout_below="@+id/editText1"        android:layout_margin="3dp"        android:padding="5dp" /></RelativeLayout>

最后是主activity:、

public class NumberTest extends Activity {//implements OnButtonListener {private EditText et;private Button bt;private MyView mv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_number_test);et = (EditText)findViewById(R.id.editText1);bt = (Button)findViewById(R.id.button1);mv = (MyView)findViewById(R.id.myview);bt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String text = et.getText().toString();if(text != ""){mv.setNumbers(text);mv.invalidate();}}});}}



源码下载链接地址:

http://download.csdn.net/detail/u011254308/6476525




for(int i=0;i<10;i++)
num[i] = Bitmap.createBitmap(resource, 0, i*11 , 7, 11);  //初始化数字图片,其width为7,height为11
原创粉丝点击