1. importandroid.content.Context;
2. importandroid.graphics.Paint;
3. importandroid.util.AttributeSet;
4. importandroid.widget.TextView;
5.
6. publicclassCustomTextView extendsTextView {
7.
8. privatestaticfloatDEFAULT_MIN_TEXT_SIZE = 10;
9. privatestaticfloatDEFAULT_MAX_TEXT_SIZE = 20;
10.
11. // Attributes
12. privatePaint testPaint;
13. privatefloatminTextSize, maxTextSize;
14.
15. publicCustomTextView(Context context, AttributeSet attrs) {
16. super(context, attrs);
17. initialise();
18. }
19.
20. privatevoidinitialise() {
21. testPaint = newPaint();
22. testPaint.set(this.getPaint());
23.
24. // max size defaults to the intially specified text size unless it is
25. // too small
26. maxTextSize = this.getTextSize();
27.
28. if(maxTextSize <= DEFAULT_MIN_TEXT_SIZE) {
29. maxTextSize = DEFAULT_MAX_TEXT_SIZE;
30. }
31.
32. minTextSize = DEFAULT_MIN_TEXT_SIZE;
33. };
34.
35.
36. privatevoidrefitText(String text, inttextWidth) {
37. if(textWidth > 0) {
38. intavailableWidth = textWidth - this.getPaddingLeft()
39. - this.getPaddingRight();
40. floattrySize = maxTextSize;
41. testPaint.setTextSize(trySize);
42. while((trySize > minTextSize)
43. && (testPaint.measureText(text) > availableWidth)) {
44. trySize -= 1;
45. if(trySize <= minTextSize) {
46. trySize = minTextSize;
47. break;
48. }
49. testPaint.setTextSize(trySize);
50. }
51. this.setTextSize(trySize);
52. }
53. };
54.
55. @Override
56. protectedvoidonTextChanged(CharSequence text, intstart, intbefore,
57. intafter) {
58. super.onTextChanged(text, start, before, after);
59. refitText(text.toString(), this.getWidth());
60. }
61.
62. @Override
63. protectedvoidonSizeChanged(intw, inth, intoldw, intoldh) {
64. if(w != oldw) {
65. refitText(this.getText().toString(), w);
66. }
67. }
68. }
拖动一个角增大textView面积
1. publicclassEditTextClass extendsActivity implementsOnTouchListener {
2.
3. privateEditText txt;
4.
5. @Override
6. publicvoidonCreate(Bundle savedInstanceState) {
7. super.onCreate(savedInstanceState);
8. setContentView(R.layout.main);
9. txt = (EditText) findViewById(YourEditTextId);
10. txt.setOnTouchListener(this);
11. }
12.
13.
14. @Override
15. publicbooleanonTouch(View v, MotionEvent event) {
16. if(event.getX() >= txt.getWidth() - 5&& event.getX() <= txt.getWidth()
17. event.getY() >= txt.getHeight() - 5&& event.getY() <= txt.getHeight()) {
18. txt.setWidth(event.getX());
19. txt.setHeight(event.getY());
20. }
21. returntrue;
22. }
23. }
ImageView伸缩动画效果