项目中经常使用到TextView当作button来使用,显得更加自然,然后每一个TextView的点击事件需要写3个xml
普通状态,按下状态,状态选择。。。<shape ...><shape ...><selector ...>
然后写了一个textView对其进行了一下封装
values下attr.xml中
<declare-styleable name="MyTextView">
<attr name="corner_Size" format="integer"/>
<attr name="normal_Color" format="color|reference"/>
<attr name="press_Color" format="color|reference"/>
</declare-styleable>
MyTextView主要代码:
package com.shj.myapplication;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
/**
* Created by SHJ on 2015/12/14.
*/
public class MyTextView extends TextView {
private int mBgColor = 0;
private int mCornerSize = 0;
private int mPressColor = 0;
private boolean isPress = false;
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
getAttrs(context, attrs);
this.setClickable(true);
}
@Override
protected void onDraw(Canvas canvas) {
if(!isPress) {
init();
}
super.onDraw(canvas);
}
private void init() {
setBackgroundRounded(this.getMeasuredWidth(), this.getMeasuredHeight(), this,mBgColor);
}
private void getAttrs(Context context, AttributeSet attrs) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyTextView);
mBgColor = ta.getColor(R.styleable.MyTextView_normalColor, Color.BLUE);
mCornerSize = ta.getInt(R.styleable.MyTextView_cornerSize, 0);
mPressColor = ta.getColor(R.styleable.MyTextView_pressColor,Color.RED);
ta.recycle();
}
public void setBackgroundRounded(int w, int h, View v,int color)
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
double dH = (metrics.heightPixels / 100) * 1.5;
int iHeight = (int)dH;
iHeight = mCornerSize;
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
paint.setAntiAlias(true);
paint.setColor(color);
RectF rec = new RectF(0, 0, w, h);
c.drawRoundRect(rec, iHeight, iHeight, paint);
v.setBackgroundDrawable(new BitmapDrawable(getResources(), bmp));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
isPress = true;
setBackgroundRounded(this.getMeasuredWidth(), this.getMeasuredHeight(), this, mPressColor);
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
isPress = false;
init();
break;
}
return super.onTouchEvent(event);
}
}
布局中使用:
<com.shj.myapplication.MyTextView
android:id="@+id/myText"
android:text="@string/hello_world"
android:padding="8dp"
app:normalColor="@color/blue_300"
app:pressColor="@color/red_200"
app:cornerSize="8"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
OK,第一次写自己的东西,希望大家多多评价,我是小白中的小白。。。