国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現顏色選取圓盤

2019-10-22 18:10:18
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android實現顏色選取圓盤的具體代碼,供大家參考,具體內容如下

先看效果圖

Android,顏色選取

xml布局

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  > <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="@string/hello"  android:id="@+id/tv_rgb"/> <RelativeLayout android:id="@+id/relativeLayout1" android:layout_height="fill_parent" android:layout_width="fill_parent">   <com.myview.ColorPickerView   android:id="@+id/cpv"   android:layout_width="230dp"   android:layout_height="230dp"   android:layout_centerInParent="true"   android:scaleType="center"   android:src="@drawable/rgb" />  </RelativeLayout> </LinearLayout> 

ColorPickerView顏色選取圓盤

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;// 點擊位置坐標   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;// 整個view半徑  float radius;// 圖片半徑   /**   * 初始化畫筆   */  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;// 整個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點和圓點 的三角形寬   float w = y - viewRadius;// 取xy點和圓點 的三角形長   float h2 = h * h;   float w2 = w * w;   float distance = (float) Math.sqrt((h2 + w2)); // 勾股定理求 斜邊距離   if (distance > radius) { // 如果斜邊距離大于半徑,則取點和圓最近的一個點為x,y    float maxX = x - viewRadius;    float maxY = y - viewRadius;    x = ((radius * maxX) / distance) + viewRadius; // 通過三角形一邊平行原理求出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;   // 內部接口 回調顏色 rgb值  public interface OnColorChangedListener {   // 手指抬起,確定顏色回調   void onColorChanged(int r, int g, int b);    // 移動時顏色回調   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() {    /**     * 手指抬起,選定顏色時     */    @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();    }     /**     * 顏色移動的時候     */    @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實現顏色選取圓盤

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德兴市| 黎平县| 陕西省| 老河口市| 格尔木市| 兴山县| 信宜市| 海安县| 广灵县| 广东省| 南汇区| 道孚县| 泾川县| 赞皇县| 津南区| 兰坪| 宜兰市| 海安县| 岚皋县| 凤翔县| 会同县| 涿鹿县| 宣武区| 万山特区| 琼结县| 涿鹿县| 平和县| 丰顺县| 平原县| 若尔盖县| 铅山县| 林口县| 三明市| 闽侯县| 利川市| 成都市| 华安县| 武胜县| 延吉市| 山丹县| 邹城市|