2012-02-22 56 views
2

我想改变依赖于滑块位置的圆半径圆形半径变化的Android进度条动态变化

我是单独创建的。 ,同时将圆形方法应用于进度栏。 面临错误。

其实我所说的进度条(搜索栏)与

setContentView(R.layout.main); 

,并绘制圆,你知道我必须用setContentView(demoview);

查询:我想合并这两个布局显示到图像中。

我不知道它有可能吗?

任何指导,教程相当可观。

感谢您为我的查询提供宝贵的时间。 希望你有解决方案。

enter image description here

+0

我并不完全明白,你在努力达到什么目的。您是否要根据滑块位置更改圆弧半径? – henrik 2012-02-22 12:56:07

+0

是的..你是100%的权利。但在此之前,我想要在一个屏幕上同时显示两个屏幕,而我正面临错误。 – NovusMobile 2012-02-22 13:05:20

回答

2

检查了这一点.. 我不使用Android的搜索条,相反,我正在画在画布上的类似搜索条.. 检查这个代码可以帮助ü..

package com.test; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class SampleComp extends View implements OnTouchListener { 

    private Paint paint = null; 
    private int width = 0; 
    private int height = 0; 
    private int barStartX = 20; 
    private int barStartY = 20; 
    private int barEndX; 
    private int barEndY = 30; 
    private int radius; 
    private int heightAvailableForCircle; 
    private int widthAvailableForCircle; 
    private int maxRadius; 
    private int totalSeekBarLength; 
    private int currentSeekBarLength = 10; 
    private int whatPercentOfSeekBarIsSelected = 50; 

    public SampleComp(Context context) { 

     super(context); 
     paint = new Paint(); 
     paint.setAntiAlias(true); 
     setOnTouchListener(this); 
    } 
    public SampleComp(Context context, AttributeSet attrs) { 

     super(context, attrs); 
     paint = new Paint(); 
     paint.setAntiAlias(true); 
    } 
    public SampleComp(Context context, AttributeSet attrs, int defStyle) { 

     super(context, attrs, defStyle); 
     paint = new Paint(); 
     paint.setAntiAlias(true); 
    } 

    @Override 
    public void onDraw(Canvas canvas){ 

     barEndX = getWidth() - 20; 
     paint.setColor(Color.WHITE); 
     setWidth(canvas.getWidth()); 
     setHeight(canvas.getHeight()); 

     setHeightAvailableForCircle(getViewHeight() - barEndY); 
     setWidthAvailableForCircle(getViewWidth() - 40); 
     System.out.println("heightAvailableForCircle: "+getAvailableHeightForCircle()); 
     System.out.println("widthAvailableForCircle: "+getWidthAvailableForCircle()); 
     totalSeekBarLength = barEndX - barStartX; 
     System.out.println("SEEK LEN: "+totalSeekBarLength); 
     canvas.drawRect(barStartX, barStartY, barEndX, barEndY, paint); 
     paint.setColor(Color.BLUE); 
     setMaxRadius(heightAvailableForCircle, widthAvailableForCircle); 
     whatPercentOfSeekBarIsSelected = getSelectedSeekBarPercentage(totalSeekBarLength,getCurrentSeekBarLenghtSelected()); 
     System.out.println("whatPercentOfSeekBarIsSelected: "+whatPercentOfSeekBarIsSelected); 
     System.out.println("!!!!!: "+canvas.getWidth()); 
     System.out.println("@@@@: "+getViewWidth()); 
     System.out.println("^^^^^^^^^************: "+ (whatPercentOfSeekBarIsSelected * (getViewWidth() - 40))/100); 
     canvas.drawRect(barStartX, barStartY, ((whatPercentOfSeekBarIsSelected * (getViewWidth() - 40))/100) + 20, 
       barEndY, paint); 
     paint.setColor(Color.GRAY); 
     setRadius(whatPercentOfSeekBarIsSelected); 
     canvas.drawCircle((canvas.getWidth())/2, (canvas.getHeight() - 30)/2, radius, paint); 
    } 

    private void setRadius(int per){ 

     this.radius = (getMaxRadius() * per)/100; 
    } 
    private int getSelectedSeekBarPercentage(int total, int current){ 

     int per = 0; 
     per = ((current * 100)/total); 
     return per; 
    } 
    private void setRadius(int total, int current){ 

     System.out.println("total: "+total); 
     System.out.println("current: "+current); 
     this.radius = (((getMaxRadius()/2) * current)/100); 
     System.out.println("radius: "+this.radius); 
    } 
    private void setMaxRadius(int h, int w){ 

     this.maxRadius = h < w ? h/2 : w/2 ; 
    } 
    private int getMaxRadius(){ 

     return this.maxRadius; 
    } 
    private void setWidth(int w){ 

     this.width = w; 
    } 

    private void setHeight(int h){ 

     this.height = h; 
    } 

    private int getViewWidth(){ 

     return this.width; 
    } 

    private int getViewHeight() { 

     return this.height; 
    } 

    private void setHeightAvailableForCircle(int availableHeightForCircle){ 

     this.heightAvailableForCircle = availableHeightForCircle; 
    } 
    private int getAvailableHeightForCircle(){ 

     return this.heightAvailableForCircle; 
    } 

    private void setWidthAvailableForCircle(int wid){ 

     this.widthAvailableForCircle = wid; 
    } 

    private int getWidthAvailableForCircle(){ 

     return this.widthAvailableForCircle; 
    } 
    private void setCurrentSeekBarLength(int x){ 

     this.currentSeekBarLength = x; 
    } 
    private int getCurrentSeekBarLenghtSelected(){ 

     return this.currentSeekBarLength; 
    } 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     int x = (int) event.getX(); 
     int y = (int) event.getY(); 
     System.out.println("x: "+x); 
     System.out.println("y: "+y); 

     if(x >= 10 && x<= barEndX && y >= 10 && y <= 30){ 

      System.out.println("TRUE"); 
      setCurrentSeekBarLength(x - 20); 
      invalidate(); 
     } 
     return false; 
    } 
} 

这是我的活动等级:

package com.test; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.widget.ImageView; 

public class SampleActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(new SampleComp(this)); 
    } 
} 
0

ü可以是更具体一点关于移动你想要实现的。乌尔的问题并不那么清楚。我能弄明白的是,你想根据进度条值增加/减小圆的半径。

+0

这是我的第二要务。现在我想在布局中显示带有进度条的圆圈可能吗?怎么样? 之后,我想用进度条更改半径。 希望你现在清楚这个... – NovusMobile 2012-02-22 13:18:16

0

看看android custom component guide。你基本上必须从android.view.View派生你的圈子组件。然后,您可以像其他任何组件一样将其添加到您的布局中。