为什么我写的android调色板小程序只能调单一颜色深浅,无法混合调色?

问题描述

为什么我写的android调色板小程序只能调单一颜色深浅,无法混合调色?

package com.example.palettebyandroid;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity {

private SeekBar  sb_red;
private SeekBar  sb_green;
private SeekBar  sb_blue;
private Bitmap bitmap;
private Bitmap newBitmap;
private Canvas canvas;
private ColorMatrix cm;
private Paint paint;
private SeekBar sb_transparent;
private ImageView iv_image;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    iv_image = (ImageView) findViewById(R.id.iv_image);
    sb_red = (SeekBar) findViewById(R.id.sb_red);
    sb_green = (SeekBar) findViewById(R.id.sb_green);
    sb_blue = (SeekBar) findViewById(R.id.sb_blue);
    sb_transparent = (SeekBar) findViewById(R.id.sb_transparent);

    bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.after8);

    newBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());

    canvas = new Canvas(newBitmap);

    paint =new Paint(); 

    cm = new ColorMatrix();

    cm.set(new float[] {
            1, 0, 0, 0, 0,
            0, 1, 0, 0, 0,
            0, 0, 1, 0, 0,
            0, 0, 0, 1, 0
            });
    paint.setColorFilter(new ColorMatrixColorFilter(cm));

    canvas.drawBitmap(bitmap, new Matrix(), paint);

    sb_red.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int progress = seekBar.getProgress();

            float fred = progress/128.0f;

            cm.set(new float[] {
                    fred, 0, 0, 0, 0,
                    0, 1, 0, 0, 0,
                    0, 0, 1, 0, 0,
                    0, 0, 0, 1, 0 });

            paint.setColorFilter(new ColorMatrixColorFilter(cm));

            canvas.drawBitmap(bitmap, new Matrix(), paint);

            iv_image.setImageBitmap(newBitmap);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {

        }
    });
    sb_green.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int progress = seekBar.getProgress();

            float fgreen = progress/128.0f;

            cm.set(new float[] {
                    1, 0, 0, 0, 0,
                    0, fgreen, 0, 0, 0,
                    0, 0, 1, 0, 0,
                    0, 0, 0, 1, 0 });

            paint.setColorFilter(new ColorMatrixColorFilter(cm));

            canvas.drawBitmap(bitmap, new Matrix(), paint);

            iv_image.setImageBitmap(newBitmap);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {

        }
    });
    sb_blue.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int progress = seekBar.getProgress();

            float fblue = progress/128.0f;

            cm.set(new float[] {
                    1, 0, 0, 0, 0,
                    0, 1, 0, 0, 0,
                    0, 0, fblue, 0, 0,
                    0, 0, 0, 1, 0 });

            paint.setColorFilter(new ColorMatrixColorFilter(cm));

            canvas.drawBitmap(bitmap, new Matrix(), paint);

            iv_image.setImageBitmap(newBitmap);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {

        }
    });
    sb_transparent.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int progress = seekBar.getProgress();

            float ftran = progress/128.0f;

            cm.set(new float[] {
                    1, 0, 0, 0, 0,
                    0, 1, 0, 0, 0,
                    0, 0, 1, 0, 0,
                    0, 0, 0, ftran, 0 });

            paint.setColorFilter(new ColorMatrixColorFilter(cm));

            canvas.drawBitmap(bitmap, new Matrix(), paint);

            iv_image.setImageBitmap(newBitmap);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {

        }
    });

    }
}

解决方案

说实话,你的代码写得挺乱的。建议你参考这篇文章整理一下代码
http://www.devstore.cn/essay/essayInfo/1570.html

解决方案二:

说实话,你的代码写得挺乱的。建议你参考这篇文章整理一下代码
http://www.devstore.cn/essay/essayInfo/1570.html

时间: 2024-12-04 17:14:27

为什么我写的android调色板小程序只能调单一颜色深浅,无法混合调色?的相关文章

问题-刚开始学习java ,自己写了一个聊天小程序,没报错但是有毛病,希望能帮忙问一下

问题描述 刚开始学习java ,自己写了一个聊天小程序,没报错但是有毛病,希望能帮忙问一下 刚开始学习java ,自己写了一个聊天小程序,没有报任何错误.测试时打开3个聊天小窗口 A,B,C,在A中输入文字,只在B中显示出来了,而且显示出了三句相同语句.查了好几个小时都没有查出来,希望高手能帮帮忙,看看是怎么回事,并且告诉我是通过什么方法找出来的. 以下是客户端和服务器端代码 客户端: import java.awt.*; import java.awt.event.*; import java

java-为什么我写的android多线程下载程序刚开始速度很快,之后越来越慢?

问题描述 为什么我写的android多线程下载程序刚开始速度很快,之后越来越慢? 我写的多线程下载程序,用了8个线程,一次读10240byte个字节. 刚开始前几s下载速度显示可以到600多k/s 但是马上就降到个位数或十几k/s 不是网络问题,因为我用别的东西下载速度都会很快. 如果我暂停后恢复又是前几s会很快,之后速度又掉下来了. 这是为什么呢??? 如何保持java下载速度,谢谢! 还有我该如何平衡线程数与一次下载字节间的关系? 解决方案 我感觉是你开启的线程 不够多的原因 供不应求

c# 多线程-用c#写了个多线程小程序,占用内存不断的增大,虚心求教

问题描述 用c#写了个多线程小程序,占用内存不断的增大,虚心求教 cleanDataTimer.Elapsed += new ElapsedEventHandler(CleanData); cleanDataTimer.Interval = 0.000000000006; cleanDataTimer.Enabled = true; Thread addRCSMemoryData = new Thread(new ThreadStart(AddRCSMemoryDeviceData)); add

使用结构、数组、循环和DataGridView写的分数统计小程序

界面如下: 代码如下: Public Class Form1 Const sMax As Integer = 100 Structure StudentType Dim strID As String Dim strName As String Dim sngScore As Single End Structure Dim udtStudent(sMax) As StudentType Dim intCount As Integer = 0 Private Sub btnNew_Click(B

[Android]任务列表中显示"小程序"的原理分析

今天被小程序刷屏了^^ 我也来凑凑热闹.谈谈微信是怎么实现在任务列表中显示"小程序"的. 效果 微信中打开了"滴滴(小程序)"后,可以看到,任务列表不仅显示了"微信", 还显示了"滴滴(小程序)"的人口.通过这个入口,就可以很方面的切换小程序了, 体验和原生程序也一样一样的. 分析 下面简单分析一下他的实现. 1.Android系统中,显示最近程序列表的View是 RecentsPanelView. 他通过refreshRec

ACCESS数据库向MySQL快速迁移小程序(一)

access|mysql|程序|数据|数据库 近日,本人为了将为公司开发的一个信息管理系统从以前试运行的开发机器上(Windows NT + IIS4.0 + Access)迁移至一台真正的Linux服务器上(Apache1.3.12 + PHP 4.03 + MySQL 3.23.26),其中数据库中的几十个表的内容迁移,开始让我小费了一些周折,从网上也下载了一些MySqL的客户软件或是数据库管理软件,写得较好的软件均有数据迁移功能,但其迁移方式不外乎两种,一种是采用文件引入方式,此种方式在处

小程序-关于数组元素初始化有一些小问题

问题描述 关于数组元素初始化有一些小问题 RT 最近写的几个小程序中几乎所有的数组元素初始化都有问题,求大神看看是哪里有问题 //求一个4*4二维数组的对角线上的值的和 #include<stdio.h> int main (void) { int array[3][3],sum = 0; int i = 0,j = 0; printf("Please enter the numbers(16 numbers inside):n"); for (i = 0;i <=3

小程序想要什么

今天,1 月 9 日,小程序正式发布,用户可以体验到各种各样的小程序,从 8 月中旬写了<别开发 app 了>后,我对小程序和微信的观察没有停止过,通过外部的观察以及和一些业内朋友交流,我逐渐清晰地推导出,微信到底想用小程序干什么,以及从小程序当中,我们能看到哪些可用创业的场景. 1       小程序的定位在变化? 1 年前的微信公开课,张小龙提出要做应用号,经过 8 个月的研发,小程序(应用号)开始内测.如果你有观察从内测至今微信小程序提供的 API.后台功能等的变化,你会发现,似乎过去

程序员测试微信小程序后,发现这群人才能赚到钱

11月4日晚,小程序开放公测消息刷爆开发者的朋友圈,众多程序猿摩拳擦掌准备搭上小程序红利之车,圈里圈外喊着小程序创业的比比皆是,甚至有美女加入程序猿微信群求男友. 为何会有这么大吸引力?小程序是什么?它推出目的是什么?主要影响哪些领域?又会有哪些人将从中获利?小程序会成功吗? 我是一名程序员,也申请了小程序的开发,有一些心得感受.与磐石之心一起讨论小程序,并把心得写出来提供给各位读者. 1.小程序是什么? 官方说法:"微信之父"张小龙描述:"小程序是一个不需要下载安装就可使用