真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android如何實(shí)現(xiàn)顏色選取圓盤(pán)

小編給大家分享一下Android如何實(shí)現(xiàn)顏色選取圓盤(pán),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

10年積累的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有慶城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

具體內(nèi)容如下

先看效果圖

Android如何實(shí)現(xiàn)顏色選取圓盤(pán)

xml布局

 
 
 
 
 
  
 
 

ColorPickerView顏色選取圓盤(pán)

package com.myview; 
 
import android.annotation.SuppressLint; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PointF; 
import android.graphics.drawable.BitmapDrawable; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.ImageView; 
 
public class ColorPickerView extends ImageView { 
 Context context; 
 private Bitmap iconBitMap; 
 float iconRadius;// 吸管圓的半徑 
 float iconCenterX; 
 float iconCenterY; 
 PointF iconPoint;// 點(diǎn)擊位置坐標(biāo) 
 
 public ColorPickerView(Context context) { 
  this(context, null); 
 } 
 
 public ColorPickerView(Context context, AttributeSet attrs, int defStyle) { 
  super(context, attrs, defStyle); 
  this.context = context; 
  init(); 
 } 
 
 public ColorPickerView(Context context, AttributeSet attrs) { 
  this(context, attrs, 0); 
  init(); 
 } 
 
 Paint mBitmapPaint; 
 Bitmap imageBitmap; 
 float viewRadius;// 整個(gè)view半徑 
 float radius;// 圖片半徑 
 
 /** 
  * 初始化畫(huà)筆 
  */ 
 private void init() { 
  iconBitMap = BitmapFactory.decodeResource(context.getResources(), 
    R.drawable.pickup);// 吸管的圖片 
  iconRadius = iconBitMap.getWidth() / 2;// 吸管的圖片一半 
 
  mBitmapPaint = new Paint(); 
  iconPoint = new PointF(); 
 
  imageBitmap = ((BitmapDrawable) getDrawable()).getBitmap(); 
  radius = imageBitmap.getHeight() / 2;// 圖片半徑 
 
  // // 初始化 
  iconPoint.x = radius; 
  iconPoint.y = radius; 
 
 } 
 
 @Override 
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
  // TODO Auto-generated method stub 
  super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
 } 
 
 Canvas canvas; 
 
 @Override 
 protected void onDraw(Canvas canvas) { 
  // TODO Auto-generated method stub 
  super.onDraw(canvas); 
  this.canvas = canvas; 
 
  viewRadius = this.getWidth() / 2;// 整個(gè)view半徑 
 
  canvas.drawBitmap(iconBitMap, iconPoint.x - iconRadius, iconPoint.y 
    - iconRadius, mBitmapPaint); 
 } 
 
 @SuppressLint("ClickableViewAccessibility") 
 @Override 
 public boolean onTouchEvent(MotionEvent event) { 
  float x = event.getX(); 
  float y = event.getY(); 
  int pixel; 
  int r; 
  int g; 
  int b; 
  switch (event.getAction()) { 
  case MotionEvent.ACTION_MOVE: 
   proofLeft(x, y); 
   pixel = getImagePixel(iconPoint.x, iconPoint.y); 
   r = Color.red(pixel); 
   g = Color.green(pixel); 
   b = Color.blue(pixel); 
   if (mChangedListener != null) { 
    mChangedListener.onMoveColor(r, g, b); 
   } 
   if (isMove) { 
    isMove = !isMove; 
    invalidate(); 
   } 
   break; 
  case MotionEvent.ACTION_UP: 
   pixel = getImagePixel(iconPoint.x, iconPoint.y); 
   r = Color.red(pixel); 
   g = Color.green(pixel); 
   b = Color.blue(pixel); 
   if (mChangedListener != null) { 
    mChangedListener.onColorChanged(r, g, b); 
   } 
   break; 
 
  default: 
   break; 
  } 
  return true; 
 } 
 
 public int getImagePixel(float x, float y) { 
 
  Bitmap bitmap = imageBitmap; 
  // 為了防止越界 
  int intX = (int) x; 
  int intY = (int) y; 
  if (intX < 0) 
   intX = 0; 
  if (intY < 0) 
   intY = 0; 
  if (intX >= bitmap.getWidth()) { 
   intX = bitmap.getWidth() - 1; 
  } 
  if (intY >= bitmap.getHeight()) { 
   intY = bitmap.getHeight() - 1; 
  } 
  int pixel = bitmap.getPixel(intX, intY); 
  return pixel; 
 
 } 
 
 /** 
  * R = sqrt(x * x + y * y) 
  * point.x = x * r / R + r 
  * point.y = y * r / R + r 
  */ 
 private void proofLeft(float x, float y) { 
 
  float h = x - viewRadius; // 取xy點(diǎn)和圓點(diǎn) 的三角形寬 
  float w = y - viewRadius;// 取xy點(diǎn)和圓點(diǎn) 的三角形長(zhǎng) 
  float h3 = h * h; 
  float w2 = w * w; 
  float distance = (float) Math.sqrt((h3 + w2)); // 勾股定理求 斜邊距離 
  if (distance > radius) { // 如果斜邊距離大于半徑,則取點(diǎn)和圓最近的一個(gè)點(diǎn)為x,y 
   float maxX = x - viewRadius; 
   float maxY = y - viewRadius; 
   x = ((radius * maxX) / distance) + viewRadius; // 通過(guò)三角形一邊平行原理求出x,y 
   y = ((radius * maxY) / distance) + viewRadius; 
  } 
  iconPoint.x = x; 
  iconPoint.y = y; 
 
  isMove = true; 
 } 
 
 boolean isMove; 
 
 public void setOnColorChangedListenner(OnColorChangedListener l) { 
  this.mChangedListener = l; 
 } 
 
 private OnColorChangedListener mChangedListener; 
 
 // 內(nèi)部接口 回調(diào)顏色 rgb值 
 public interface OnColorChangedListener { 
  // 手指抬起,確定顏色回調(diào) 
  void onColorChanged(int r, int g, int b); 
 
  // 移動(dòng)時(shí)顏色回調(diào) 
  void onMoveColor(int r, int g, int b); 
 } 
}

MyViewActivity主界面

package com.myview; 
 
import com.myview.ColorPickerView.OnColorChangedListener; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 
 
public class MyViewActivity extends Activity { 
  
 TextView tv_rgb; 
  
 /** Called when the activity is first created. */ 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.main); 
   
  tv_rgb=(TextView)this.findViewById(R.id.tv_rgb); 
   
  ColorPickerView cpv=(ColorPickerView)this.findViewById(R.id.cpv); 
  cpv.setOnColorChangedListenner(new OnColorChangedListener() { 
   /** 
    * 手指抬起,選定顏色時(shí) 
    */ 
   @Override 
   public void onColorChanged(int r, int g, int b) { 
    if(r==0 && g==0 && b==0){ 
     return; 
    } 
    Toast.makeText(MyViewActivity.this, "選取 RGB:"+r+","+g+","+b, Toast.LENGTH_SHORT).show(); 
   } 
 
   /** 
    * 顏色移動(dòng)的時(shí)候 
    */ 
   @Override 
   public void onMoveColor(int r, int g, int b) { 
    if(r==0 && g==0 && b==0){ 
     return; 
    } 
    tv_rgb.setText("RGB:"+r+","+g+","+b); 
   } 
  }); 
 } 
}

以上是“Android如何實(shí)現(xiàn)顏色選取圓盤(pán)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享題目:Android如何實(shí)現(xiàn)顏色選取圓盤(pán)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/ggdcgc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部