안 드 로 이 드 멀티미디어 의 화판 개발 사례 공유
먼저 효과 보기:
사실 화판 의 원 리 는 매우 간단 하 다.바로 먼저 스크린 을 누 른 점 을 기록 한 다음 에 한 번 이동 할 때마다 이 두 번 이동 하 는 점 을 연결 시 키 고 반복 하면 이미 지 는 여러 직선 으로 구성 된다.
핵심 코드:
public class MainActivity extends Activity implements OnClickListener,OnSeekBarChangeListener {
private View red_view,green_view,blue_view; //
private SeekBar seekBar; //
private ImageView iv;
private Bitmap bitmap,backgroud; //
private Canvas canvas; //
private Paint paint; //
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
red_view = findViewById(R.id.red_view);
green_view = findViewById(R.id.green_view);
blue_view = findViewById(R.id.blue_view);
seekBar = (SeekBar) findViewById(R.id.seekbar);
iv = (ImageView) findViewById(R.id.iv);
iv.setImageResource(R.drawable.bg);
//
backgroud = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
//
bitmap = Bitmap.createBitmap(backgroud.getWidth(), backgroud.getHeight(), backgroud.getConfig());
//
canvas = new Canvas(bitmap);
//
paint = new Paint();
paint.setColor(Color.BLACK);//
paint.setStyle(Style.STROKE);//
//
Matrix matrix = new Matrix();
//
canvas.drawBitmap(backgroud, matrix, paint);
red_view.setOnClickListener(this);
green_view.setOnClickListener(this);
blue_view.setOnClickListener(this);
seekBar.setOnSeekBarChangeListener(this);
iv.setOnTouchListener(new OnTouchListener() {
float startX;
float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
//
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
//
case MotionEvent.ACTION_MOVE:
float stopX = event.getX();
float stopY = event.getY();
// //
canvas.drawLine(startX, startY, stopX, stopY, paint);
// ( )
startX = event.getX();
startY = event.getY();
iv.setImageBitmap(bitmap);
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.red_view:
//
paint.setColor(Color.RED);
break;
case R.id.green_view:
//
paint.setColor(Color.GREEN);
break;
case R.id.blue_view:
//
paint.setColor(Color.BLUE);
break;
default:
break;
}
}
//
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
//
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
//
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();// 100
paint.setStrokeWidth(progress/10f);// (0-10)
}
}
해 보 니 간단 하군.어서 해 보 게!또 금요일 이 되 었 습 니 다.즐 거 운 주말 되 세 요.여러분 들 이 편집장 에 대한 지지 에 감 사 드 립 니 다.편집장 님 은 반드시 더욱 분발 하여 여러분 들 에 게 더 많은 멋 진 글 을 공유 할 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.