我的UI闪烁,每当我尝试动态调整图像视图大小时,图像就会消失


@SuppressWarnings({ "rawtypes" })
        public void addAttendance(ArrayList<Properties> attendanceusers) {
            //tl.removeView(tr);
            tl.removeAllViews();
            //addHeaderAttendance();
            ctr=0;
            for (Iterator i = attendanceusers.iterator(); i.hasNext();) {
                Properties p = (Properties) i.next();
                property_list.add(p);
                /** Create a TableRow dynamically **/
                tr = new TableRow(this);
    picurl=p.getPic();
                profile = new ImageView(this);
                profile.setPadding(20,50,20,50);
                new AsyncTask<Void, Void, Void>() {                  
                    @Override
                    protected Void doInBackground(Void... params) {
                        try {
                            InputStream in = new URL(picurl).openStream();
                            bmp = BitmapFactory.decodeStream(in);
                        } catch (Exception e) {
                           // log error
                        }
                        return null;
                    }
                    @Override
                    protected void onPostExecute(Void result) {
                        if (bmp != null)
                            profile.setImageBitmap(bmp);
                    }
               }.execute();


                profile.setOnClickListener(this);
                //myButton.setPadding(5, 5, 5, 5);
                Ll = new LinearLayout(this);
                params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT);
                params.setMargins(0, 0, 0, 0);
                Ll.setPadding(0, 0, 20, 0);
                Ll.addView(profile,params);
                tr.addView((View)Ll);
    ctr++;
                 // Add the TableRow to the TableLayout
                tl.addView(tr, new TableLayout.LayoutParams(
                        LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));
            }
        }

上面的代码是动态设计。那里有一个图像,其中我使用Web服务从数据库中获取图像。问题是图像闪烁,而且太大。我认为这是眨眼的,因为我在线程中创建了一个线程,但是我仍然对如何修复它感到困惑。我的异步任务是我如何获得图像的方式。

public ArrayList<Properties> attendanceUse(String result) {
            ArrayList<Properties> attendanceusers = new ArrayList<Properties>();
            try {
                JSONArray jArray = new JSONArray(result);
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject json_data = jArray.getJSONObject(i);
                    Properties user = new Properties();
                    user.setPic(json_data.getString("student_ImgUrl"));
                    attendanceusers.add(user);
                    //attendanceusers.get(index)
                }
            } catch (JSONException e) {
                Log.e("log_tag", "Error parsing data " + e.toString());  
            }
            return attendanceusers;
        }

上面的代码是我与HTDOC内部的PHP查询有关的图像的方式。Student_imgurl是我从MySQL数据库中选择的列来获取URL。

private void update()
        {
            final Handler handler = new Handler();
            Timer timer = new Timer();
            String splithis;
         splithis=mySpinner.getSelectedItem().toString();
         splited = splithis.split(" ");
        course = splited[0];
        room = splited[1];
        sections = splited[2];
            TimerTask task = new TimerTask() {       
                @Override
                public void run() {
                    data = bw.getAttendanceFromDB(term, course,sections,day,room);
                    handler.post(new Runnable() {
                        public void run() {       
                            try {
                    //asyntask class ito
                                ArrayList<Properties> attendanceusers = attendanceUse(data);
                                addAttendance(attendanceusers); 
                            } catch (Exception e) {
                                // error, do something
                            }
                        }//run
                    });//handler mo
                }//runmo
            };//timer
            timer.schedule(task, 0,1000); //timer
        }

这是我的更新无效。它在计时器上,以便图像将实时更新。

myspinner.setOnitemSelectedListener(new OnitemSelectedListener(){

        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            data ="";

            new Thread(new Runnable() {
                public void run() {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                               update();                 
                        }
                    });   
                }
            }).start();
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
            return;
        }
    });

上面的代码是我在我的发电中的代码。我有一个旋转器/下拉台,他们将选择课程室段,然后当他们选择一件项目时,将显示该课程课程中学生的图像。我想要的是停止闪烁的UI并调整imageView的大小。

我的想法是,通过用void update()类替换CC_1方法可以更好地完成此操作,以从数据库中汲取与会者数据,并同时同时下载配置文件图像doInBackground()方法。当每个参与者加载时,您可以通过publishProgress(Properties)onProgressUpdate(Properties[])方法更新UI。这应该会导致不太笨拙的UI更新。

请记住,如果您在同一时间运行多个asynctasks,则应在AsyncTask.THREAD_POOL_EXECUTOR上执行它们以允许它们并行运行(默认执行者是AsyncTask.SERIAL_EXECUTOR

关于图像大小的问题,您可能不会在视图上设置正确的ImageView.ScaleType以使其正确安装。我预计应该是ImageView.ScaleType.CENTER_INSIDE

最新更新