采集的小蜜蜂 发表于 2020-11-11 16:50

【Android】获取当前坐标的颜色不准确。

本帖最后由 采集的小蜜蜂 于 2020-11-11 17:46 编辑

取到的颜色不是现在我把ImageView调整到居中的颜色,而是以Imageview以左上角为坐标的颜色。
MainActivity.classpackage com.ykd.bed.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.media.Image;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.ykd.bed.R;
import com.ykd.bed.base.BaseActivity;
import com.ykd.bed.utils.DrawView;

import org.json.JSONArray;
import org.json.JSONException;

import butterknife.BindView;

public class RGBActivity extends BaseActivity implements View.OnTouchListener, View.OnClickListener {
@BindView(R.id.iv_back)
    ImageView ivBack;
@BindView(R.id.colorpan)
    ImageView colorpan;
@BindView(R.id.colortext)
    TextView textView;
@BindView(R.id.rgblayout)
    RelativeLayout relativeLayout;
    private Bitmap bitmap;

    @Override
    protected String getClassName() {
      return RGBActivity.class.getSimpleName();
    }

    @Override
    protected int getViewId() {
      return R.layout.activity_r_g_b;
    }

    @Override
    protected void initView() {
      ivBack.setOnClickListener(this);
      bitmap = ((BitmapDrawable) colorpan.getDrawable()).getBitmap();
      colorpan.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int x = (int) event.getX()+100;
                int y = (int) event.getY()+150;
                try{
                if (event.getAction() == MotionEvent.ACTION_UP) {
                  Toast.makeText(mContext,x+"...."+y+"",Toast.LENGTH_SHORT).show();
                  int color = bitmap.getPixel(x, y);
                  // 如果你想做的更细致的话 可以把颜色值的R G B 拿到做响应的处理
                  int r = Color.red(255-color);
                  int g = Color.green(255-color);
                  int b = Color.blue(255-color);
                  textView.setText( "r=" + r + ",g=" + g + ",b="
                            + b);
                  textView.setTextColor(Color.rgb(r,g,b));
                }else if(event.getAction()==MotionEvent.ACTION_MOVE){
                  int color = bitmap.getPixel(x, y);
                  // 如果你想做的更细致的话 可以把颜色值的R G B 拿到做响应的处理
                  int r = Color.red(color);
                  int g = Color.green(color);
                  int b = Color.blue(color);
                  textView.setText( "r=" + r + ",g=" + g + ",b="
                            + b);
                }}catch (Exception e){
                  e.printStackTrace();
                }
                return true;
            }
      });
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
      return false;
    }

    @Override
    public void onClick(View view) {
      switch (view.getId()){
            case R.id.iv_back:
                finish();
                break;
      }
    }
}
activity_r_g_b.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rgblayout"
    android:background="@mipmap/bg">
    <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
      <ImageView
            android:layout_marginTop="15dp"
            android:layout_marginStart="10dp"
            android:id="@+id/iv_back"
            android:layout_centerVertical="true"
            android:src="@mipmap/setting_back"
            android:layout_width="30dp"
            android:layout_height="30dp"/>

      <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/RGBLight"
            android:textColor="@color/apptheme"
            android:layout_centerInParent="true"
            android:textSize="20sp" />
    </RelativeLayout>
    <RelativeLayout
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="50dp"
      android:layout_centerHorizontal="true">
<ImageView
    android:id="@+id/colorpan"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:layout_centerHorizontal="true"
    android:src="@mipmap/palette"/>
    </RelativeLayout>
<TextView
    android:id="@+id/colortext"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/white"
    android:textSize="30sp"/>

</RelativeLayout>

深爱我的女孩 发表于 2020-11-11 17:12

不懂,帮顶!

采集的小蜜蜂 发表于 2020-11-11 17:45

解决了,我自己修改了它取值的坐标
package com.ykd.bed.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.media.Image;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.ykd.bed.R;
import com.ykd.bed.base.BaseActivity;
import com.ykd.bed.utils.DrawView;

import org.json.JSONArray;
import org.json.JSONException;

import butterknife.BindView;

public class RGBActivity extends BaseActivity implements View.OnTouchListener, View.OnClickListener {
@BindView(R.id.iv_back)
    ImageView ivBack;
@BindView(R.id.colorpan)
    ImageView colorpan;
@BindView(R.id.colortext)
    TextView textView;
@BindView(R.id.rgblayout)
RelativeLayout relativeLayout;
    private Bitmap bitmap;

    @Override
    protected String getClassName() {
      return RGBActivity.class.getSimpleName();
    }

    @Override
    protected int getViewId() {
      return R.layout.activity_r_g_b;
    }

    @Override
    protected void initView() {
      ivBack.setOnClickListener(this);
      bitmap = ((BitmapDrawable) colorpan.getDrawable()).getBitmap();
      colorpan.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int x = (int) event.getX()+100;
                int y = (int) event.getY()+150;
                try{
                if (event.getAction() == MotionEvent.ACTION_UP) {
                  int color = bitmap.getPixel(x-100, y-150);
                  // 如果你想做的更细致的话 可以把颜色值的R G B 拿到做响应的处理
                  int r = Color.red(color);
                  int g = Color.green(color);
                  int b = Color.blue(color);

                  textView.setText( "r=" + r + ",g=" + g + ",b="
                            + b);
                  textView.setTextColor(Color.rgb(r,g,b));
                }else if(event.getAction()==MotionEvent.ACTION_MOVE){
                  int color = bitmap.getPixel(x-100, y-150);
                  // 如果你想做的更细致的话 可以把颜色值的R G B 拿到做响应的处理
                  int r = Color.red(color);
                  int g = Color.green(color);
                  int b = Color.blue(color);
                  textView.setText( "r=" + r + ",g=" + g + ",b="
                            + b);
                }}catch (Exception e){
                  e.printStackTrace();
                }
                return true;
            }
      });
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
      return false;
    }

    @Override
    public void onClick(View view) {
      switch (view.getId()){
            case R.id.iv_back:
                finish();
                break;
      }
    }
}

yzydys 发表于 2020-11-11 18:33

页: [1]
查看完整版本: 【Android】获取当前坐标的颜色不准确。