可以根据需求更改构造方法中view中显示的内容
下面代码中只是显示一个textview
public class ScaleView extends RelativeLayout {
private TextView textView;
public ScaleView(Context context) {
super(context);
}
public ScaleView(Context context, AttributeSet attrs) {
super(context, attrs);
textView = new TextView(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
textView.setLayoutParams(params);
this.addView(textView);
}
public ScaleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setText(String text) {
textView.setText(text);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
preX = (int) event.getRawX();
preY = (int) event.getRawY();
if (!isDown) {
isDown = true;
down(this);
}
break;
case MotionEvent.ACTION_UP:
if (isDown) {
isDown = false;
up(this);
this.performClick();
}
break;
case MotionEvent.ACTION_MOVE:
int currentX = (int) event.getRawX();
int currentY = (int) event.getRawY();
int distance = (int) Math.hypot(Math.abs(currentX - preX),
Math.abs(currentY - preY));
if (isDown && distance > 10) {
isDown = false;
up(this);
}
break;
}
return true;
}
private int preX = 0;
private int preY = 0;
private boolean isDown = false;
private void down(View view) {
ScaleAnimation sanimation = new ScaleAnimation(1.0f, 0.95f, 1.0f,
0.95f, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
sanimation.setDuration(200);
sanimation.setFillAfter(true);
view.startAnimation(sanimation);
}
private void up(View view) {
ScaleAnimation sanimation = new ScaleAnimation(0.95f, 1.0f, 0.95f,
1.0f, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
sanimation.setDuration(200);
sanimation.setFillAfter(true);
view.startAnimation(sanimation);
}
}