Android 사용자 정의 view 위 챗 리 셋 회전 풍차
비디오 를 잘 못 해서 어 쩔 수 없어 요.스마트 캡 처 했 어 요.
더 이상 말 하지 않 고 바로 코드 를 올 립 니 다.
package com.shipneg.demoysp.demo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.CountDownTimer;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
/**
* Created by dell on 2017/4/7.
*/
public class RotationView extends ImageView {
/**
*
**/
private Bitmap bitMap;
/**
*
**/
private int rad = 0;
/**
*
**/
private int excursion = -100;
/**
* : ,
**/
private int width = 0;
/***
* : ,
**/
private int height = 0;
/**
*
**/
private Paint paint = new Paint();
public RotationView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RotationView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public RotationView(Context context) {
super(context);
}
/**
*
*/
public void initSize() {
width = bitMap.getWidth();
height = bitMap.getHeight();
postInvalidate();
}
public void setBitMap(Bitmap bitMap) {
this.bitMap = bitMap;
}
// View ,
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
CountDownTimer c = new CountDownTimer(5000, 10) {
@Override
public void onTick(long millisUntilFinished) {
postInvalidate();
rad = rad + 7;
}
@Override
public void onFinish() {
downY = 0;
excursion = -100;
postInvalidate();
}
};
/***
* onDraw , , Matrix
*/
@Override
protected void onDraw(Canvas canvas) {
Matrix matrix = new Matrix();
//
matrix.setTranslate((float) width / 2, (float) height / 2);
// rad -=15;// 3 ,
//
matrix.preRotate(rad);
//
matrix.postTranslate(0, excursion);
//
matrix.preTranslate(-(float) width / 2, -(float) height / 2);
//
canvas.drawBitmap(bitMap, matrix, paint);
super.onDraw(canvas);
}
private int downY = 0;
private int moveY = 0;
private int abc = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:// move ,
postInvalidate();//
downY = (int) event.getY();
c.cancel();
break;
case MotionEvent.ACTION_MOVE:// move ,
//
int movey2 = moveY;
rad = (int) -event.getY() * 6;//
moveY = (int) (event.getY() - downY);//
int chz = moveY - movey2;
if (chz > 10) {
chz = chz / 10;
} else if (chz < -10) {
chz = chz / 10;
}
Log.e("TAG:" + excursion, "chz: " + chz + "//moveY:" + moveY + "//movey2:" + movey2);
//100
if (excursion >= 100) {
abc = abc + chz;
if (chz < 0 && abc - chz < 0) {
excursion = excursion + chz;
}
} else {
//
excursion += chz;
}
postInvalidate();
c.cancel();
break;
case MotionEvent.ACTION_UP:
c.start();
break;
}
return true;
}
}
호출 방법
//
RotationView rotation = (RotationView) view.findViewById(R.id.rotationView);
BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.fengche);
rotation.setBitMap(drawable.getBitmap());
rotation.initSize();
사진 자원 은 스스로 자 르 고 본인 은 ps 를 할 줄 모 르 기 때문에 잘 썰 리 지 않 습 니 다.양해 해 주 십시오.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.