最近在做一些小游戏,然后难免就遇到一些矢量图集成的全部图片。(即一张图包含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;
@Override
protected 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() {
@Override
public void onClick(View v) {
String text = et.getText().toString();
if(text != ""){
mv.setNumbers(text);
mv.invalidate();
}
}
});
}
}
源码下载链接地址:
http://download.youkuaiyun.com/detail/u011254308/6476525
for(int i=0;i<10;i++)
num[i] = Bitmap.createBitmap(resource, 0, i*11 , 7, 11); //初始化数字图片,其width为7,height为11
num[i] = Bitmap.createBitmap(resource, 0, i*11 , 7, 11); //初始化数字图片,其width为7,height为11