第一次在csdn写博客,作为一个对自定义view学习的开始吧。功能是输入字符串显示第一个字符在view上和生成png到sd卡,很简单直接贴代码了:
package main.beini.com.wordstranpic.utils; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; /** * Created by beini on 2016/8/13 */ public class WordsSowView extends ImageView { private String str = ""; public WordsSowView(Context context) { super(context); } public WordsSowView(Context context, AttributeSet attrs) { super(context, attrs); } public WordsSowView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setBackground(Drawable background) { super.setBackground(background); } public void setString(String str) { if (str == null || str.length() == 0) { return; } this.str = str.substring(0, 1); invalidate(); } Paint p; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); p = new Paint(); p.setColor(Color.WHITE); p.setTextSize(175f); Rect rect = new Rect(); p.getTextBounds(str, 0, str.length(), rect); int w = rect.width(); int h = rect.height(); canvas.drawText(str, this.getWidth() / 2 - w / 2, this.getHeight() / 2 + h / 2, p); } }
package main.beini.com.wordstranpic; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import main.beini.com.wordstranpic.utils.WordsSowView; public class ShowWordsActivity extends AppCompatActivity { private WordsSowView wordsSowView; EditText edt_input; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_words); initView(); } private void initView() { edt_input = (EditText) findViewById(R.id.edt_input); wordsSowView = (WordsSowView) findViewById(R.id.my_view); } public void showText(View view) { if (TextUtils.isEmpty(edt_input.getText())) { return; } wordsSowView.setString(edt_input.getText().toString()); wordsSowView.setBackgroundColor(Color.BLUE); } public void savePic(View view) { new Thread(new Runnable() { @Override public void run() { // 获取bitmap转换为png wordsSowView.buildDrawingCache(); Bitmap bitmap = wordsSowView.getDrawingCache(); long current = System.currentTimeMillis(); String path = Environment.getExternalStorageDirectory() + "/" + current + ".png"; FileOutputStream os = null; try { os = new FileOutputStream(new File(path)); bitmap.compress(Bitmap.CompressFormat.PNG, 100, os); os.flush(); os.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" tools:context="main.beini.com.wordstranpic.ShowWordsActivity"> <EditText android:id="@+id/edt_input" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:onClick="showText" android:text="显示第一个字"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="savePic" android:text="生成图片保存在内存卡"/> <main.beini.com.wordstranpic.utils.WordsSowView android:id="@+id/my_view" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_horizontal" android:layout_marginTop="35dp" android:background="@color/colorAccent"/> </LinearLayout>