自定义view实现一个view的磁贴效果

来源:互联网 发布:淘宝数据中心 编辑:程序博客网 时间:2024/05/21 10:00

可以根据需求更改构造方法中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);}@Overridepublic 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);}}


 

0 0
原创粉丝点击